Comment puis-je détecter si les modifications de nano ont été supprimées ou sauvegardées?

J'écris actuellement un petit script d'installation pour une application Linux qui a besoin de l'user pour éditer un file de configuration avant le démarrage de l'application. J'ai choisi de faire le script simplement ouvrir le file de configuration dans Nano et reprendre le script par la suite. Je dois toutefois vérifier si l'user a sauvegardé les modifications (pour ensuite continuer à démarrer l'application) ou s'il les a rejetées (ce qui indiquerait que l'user ne veut pas continuer).

J'ai déjà vérifié si cela est possible avec le code de sortie returnné par Nano, et ce n'est apparemment pas – il renvoie toujours 0 même si les changements ont été supprimés. Y a-t-il un autre moyen de savoir si le file a été modifié et sauvegardé, ou devrais-je le faire d'une toute autre façon?

Vous pouvez utiliser la command stat pour vérifier l'heure de modification du file avant et après nano . Quelque chose comme:

 oldtime=`stat -c %Y "$filename"` nano "$filename" if [[ `stat -c %Y "$filename"` -gt $oldtime ]] ; then echo $filename has been modified fi 

Bien sûr, cela ne détectera pas si nano modifié le file ou un autre programme, mais cela pourrait être considéré comme une fonctionnalité. (Vous pouvez utiliser un autre programme pour éditer le file, puis quitter nano sans save.)

J'essayais récemment de faire quelque chose de similaire, j'ai finalement utilisé une modification de l'approche de @ cjm.

Tout d'abord, sous Darwin, j'ai utilisé stat -f %m pour get le time (en secondes) depuis la modification du file.

Cela fonctionne bien, mais il y a une petite chance que l'user sauvegarde et quitte l'éditeur dans la même seconde qu'une modification faite par votre script. Pour résoudre cela, je cogner manuellement le time modifié du file d'une seconde en utilisant le toucher.

 #!/bin/bash echo "some text" > myfile.txt touch -A -01 myfile.txt oldtime=`stat -f %m myfile.txt` vi myfile.txt if [[ `stat -f %m myfile.txt` -gt $oldtime ]] ; then echo "file was edited" fi