我即将编写一个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.
亲切的问候
答案 0 :(得分:1)
退出状态不会告诉您用户在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
答案 1 :(得分:1)
退出状态不同于仅在应用程序失败时。
在你的情况下,我建议你:
答案 2 :(得分:0)
影响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
fi