저는 현재 애플리케이션을 시작하기 전에 사용자가 구성 파일을 편집해야 하는 Linux 애플리케이션용 간단한 설정 스크립트를 작성 중입니다. 나는 스크립트가 Nano에서 구성 파일을 연 다음 스크립트를 복원하도록 선택했습니다. 그러나 사용자가 변경 사항을 저장했는지(그런 다음 계속해서 애플리케이션을 실행했는지), 아니면 사용자가 변경 사항을 포기했는지(사용자가 계속하기를 원하지 않음을 나타냄) 여부를 감지해야 합니다.
Nano에서 반환된 종료 코드로 이것이 가능한지 확인했지만 분명히 그렇지 않습니다. 변경 사항이 삭제되더라도 항상 0을 반환합니다. 파일이 변경되었는지 확인하고 저장하는 다른 방법이 있습니까, 아니면 완전히 다른 방법으로 이 작업을 수행해야 합니까?
답변1
당신은 그것을 사용할 수 있습니다통계자료파일 전후의 수정 시간을 보는 명령입니다 nano
. 그것은 다음과 같습니다:
oldtime=`stat -c %Y "$filename"`
nano "$filename"
if [[ `stat -c %Y "$filename"` -gt $oldtime ]] ; then
echo $filename has been modified
fi
물론 이는 nano
파일이 수정되었는지 또는 다른 프로그램이 파일을 수정했는지 감지하지 못하지만 기능으로 간주될 수 있습니다. (다른 프로그램을 사용하여 파일을 편집한 후 저장 nano
하지 않고 종료할 수 있습니다.)
답변2
나는 최근에 비슷한 것을 시도했고 결국 @cjm의 방법을 수정하여 사용하게 되었습니다.
stat -f %m
첫째, Darwin에서는 파일이 수정된 이후의 시간을 초 단위로 가져오곤 했습니다 .
이는 잘 작동하지만 사용자가 스크립트 수정과 동시에 편집기를 저장하고 종료할 가능성은 희박합니다. 이 문제를 해결하기 위해 터치를 사용하여 수동으로 파일 수정 시간을 1초 늘렸습니다.
#!/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