如何crontab
在FreeBSD中编辑文件?
$ crontab -e
# ... I do my thing in vim & :wq
"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
Exit 1
使用EDITOR=nvi
效果很好... Linux似乎也效果很好...
如何crontab
在FreeBSD中编辑文件?
$ crontab -e
# ... I do my thing in vim & :wq
"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
Exit 1
使用EDITOR=nvi
效果很好... Linux似乎也效果很好...
Answers:
问题是Vim如何写文件。默认情况下,它会复制文件并覆盖原始文件。
您可以通过以下方式观察到这一点:
# Show the file's inode
$ ls -i a
3156153 a
# Open file in Vim, :wq
# inode changed!
$ ls -i a
3155322 a
crontab
对此感到困惑(请参阅参考资料:help crontab
)
您需要使用:set backupcopy
来yes
使Vim覆盖原始文件:
"yes" make a copy of the file and overwrite the original one
您可以使用以下命令自动对crontab文件执行此操作:
au FileType crontab setlocal bkc=yes
在OSX上也是如此。在研究了问题之后,我发现它可以与Plain一起使用vi
,但不能与一起使用vim
。
因此,解决方法可能是:
EDITOR=vi crontab -e
但是vi
通常是链接到的vim
(例如在OSX上),因此是同一回事。
这可以通过vimrc文件中的以下行解决:
au BufNewFile,BufRead crontab.* set nobackup | set nowritebackup
通过将以下行添加到.vimrc文件,可以解决此问题:
if $VIM_NOBACKUP
set nobackup
set nowritebackup
endif
并运行命令:
VIM_NOBACKUP=1 crontab -e
您也可以尝试定义以下变量:
EDITOR='VIM_NOBACKUP=1 vim'
什么出现这种情况的原因与方式做vim
/ vi
款待备份文件。
crontab -e
产生crontab: VIM_NOBACKUP=1 vim: No such file or directory
。
crontab
通常会提升EDITOR
或VISUAL
(如果已定义)的值,因此您可以设置它们:EDITOR='VIM_NOBACKUP=1 vim'
。