Como detecto se as alterações no nano foram descartadas ou salvas?

4

Atualmente, estou escrevendo um pequeno script de configuração para um aplicativo do Linux que precisa que o usuário edite um arquivo de configuração antes que o aplicativo seja iniciado. Eu escolhi fazer o script simplesmente abrir o arquivo de configuração no Nano e retomar o script depois. No entanto, preciso detectar se o usuário salvou as alterações (para continuar iniciando o aplicativo) ou se as descartou (o que indica que o usuário não deseja continuar).

Eu já verifiquei se isso é possível com o código de saída retornado do Nano, e aparentemente não é - ele sempre retorna 0 mesmo se as alterações foram descartadas. Existe outra maneira de descobrir se o arquivo foi alterado e salvo, ou terei que fazer isso de uma maneira totalmente diferente?

    
por Sven Slootweg 04.05.2012 / 19:13

2 respostas

3

Você pode usar o comando stat para verificar o tempo de modificação do arquivo antes e depois de nano . Algo como:

oldtime='stat -c %Y "$filename"'
nano "$filename"

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

Claro, isso não detectará se nano modificou o arquivo ou algum outro programa, mas isso pode ser considerado um recurso. (Você pode usar algum outro programa para editar o arquivo e sair do nano sem salvar.)

    
por 04.05.2012 / 19:36
0

Recentemente, eu estava tentando fazer algo semelhante, eventualmente usei uma modificação da abordagem do @ cjm.

Em primeiro lugar, sob Darwin, usei stat -f %m para obter o tempo (em segundos) desde que o arquivo foi modificado.

Isso funciona bem, mas há uma pequena chance de o usuário salvar e sair do editor no mesmo segundo de uma modificação feita pelo seu script. Para resolver isso, bato manualmente o tempo modificado do arquivo em um segundo usando o toque.

#!/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
    
por 25.10.2015 / 01:24