我将要编写一个shell脚本来编辑一些文件。
我是这样做的:
/usr/bin/vim $file现在我想问一下vim的退出状态。如果用户关闭时保存了更改(:wq或:x),或者关闭时没有更改(:q,:q!)做一些其他的事情
if [ vi-exit-status=wq ] ; then
# do this
else # vi didn't save anything
# do that
fi我该怎么做呢?当我调用vi创建一个新文件并退出它而不保存时(:q!)然后我通过以下方式检查状态
echo $?答案是0。如果我通过vi/vim保存一些东西或创建一个文件,它也是0。
亲切的问候
发布于 2013-02-28 18:02:30
退出状态不会告诉你用户在vim中做了什么。也许您可以比较文件之前和之后的时间戳,看看它是否被写入?
这对我来说很有效:
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发布于 2013-02-28 18:03:48
退出状态与仅当应用程序失败时不同。
在这种情况下,我建议你:
发布于 2013-02-28 18:17:21
影响Vim退出状态的惟一方法是使用:cquit,但用户通常不会这样做。
您想要的是文件是否已被Vim修改的指示。您可以通过检查编辑前后的修改时间来完成此操作,如下面的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
fihttps://stackoverflow.com/questions/15132481
复制相似问题