2013-02-28 6 views
2

Je suis sur le point d'écrire un script shell pour éditer certains fichiers.Shell Script appelle l'éditeur vim, récupère la méthode de sortie

que je fais comme ça:

/usr/bin/vim $file 

Maintenant, je veux demander à l'état de sortie de vim. Si l'utilisateur ferme avec des changements enregistrés faire quelque chose (: wq ou: x), ou si elle est fermée sans modification (: q,: q) faire quelque chose d'autre

if [ vi-exit-status=wq ] ; then 
    # do this 
else # vi didn't save anything 
    # do that 
fi 

Comment puis-je faire cela? Quand je vi appelle à créer un nouveau fichier et quitter sans l'enregistrer (: q), puis-je vérifier l'état via

echo $? 

la réponse est 0. Si je sauve quelque chose ou créer un fichier via vi/vim, il est également 0.

Amitiés

Répondre

0

l'état de sortie ne vous dit pas ce que l'utilisateur a fait dans vim. Peut-être pourriez-vous comparer l'horodatage du fichier avant et après pour voir s'il a été écrit?

Cela fonctionne pour moi:

echo Edit me > editme.txt 
time1=`stat -c%y editme.txt` 
vim editme.txt 
time2=`stat -c%y editme.txt` 
if [ "$time1" != "$time2" ]; then 
    echo You saved it. 
else 
    echo No change. 
fi 
+0

Merci, ce script a fonctionné. Belle façon de le faire :) –

1

état de sortie est différent de seulement si une application a échoué.

En vous cas, je vous suggère:

  1. sauver md5sum courant à une variable
  2. vim ouverte
  3. sauver md5sum courant à une variable
  4. comparer les deux
0

La seule La façon d'influencer le statut de sortie de Vim est d'utiliser :cquit, mais les utilisateurs ne le font généralement pas.

Ce que vous préférez, c'est si le fichier a été modifié par Vim. Vous pouvez le faire en cochant la date de modification avant et après le montage, comme dans cet extrait de Bash:

EDIT=/path/to/file.txt 
MODTIME=$(stat -c %Y "$EDIT") 
"$EDITOR" "$EDIT" || { echo 2>&1 "Unclean exit of editor; aborting!"; exit $?; } 
NEWMODTIME=$(stat -c %Y "$EDIT") 

if [ $NEWMODTIME -eq $MODTIME ]; then 
    echo "No changes done." 
    exit 0 
fi 
Questions connexes