我目前正在为 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 方法的修改。
首先,在Darwin下,我曾经stat -f %m
获取文件被修改后的时间(以秒为单位)。
这效果很好,但用户在脚本修改的同一秒内保存并退出编辑器的可能性很小。为了解决这个问题,我使用 touch 手动将文件的修改时间增加一秒。
#!/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