![设置使用 sudo 调用的 crontab -e 的默认编辑器](https://linux22.com/image/1344059/%E8%AE%BE%E7%BD%AE%E4%BD%BF%E7%94%A8%20sudo%20%E8%B0%83%E7%94%A8%E7%9A%84%20crontab%20-e%20%E7%9A%84%E9%BB%98%E8%AE%A4%E7%BC%96%E8%BE%91%E5%99%A8.png)
我在 Debian Squeeze 上使用 Bash。我刚刚阅读了这个主题:将 crontab 的默认文本编辑器更改为 vim
我已将两个变量VISUAL
和EDITOR
导出到 vim,供普通用户和 root 使用。这有效 – 当我crontab -e
以普通用户或 root 身份输入时,crontab 会运行 vim 进行编辑。
但运行sudo crontab -e
会打开nano。
运行sudo echo $EDITOR
(或$VISUAL
)给出vim
int 输出。
答案1
默认情况下,出于安全目的,sudo
不保留用户环境。
有多种方法可以解决这个问题;对于您的具体情况,我建议添加VISUAL=/usr/bin/vim
(以及EDITOR=/usr/bin/vim
对于使用错误的程序)/etc/environment
。
第二种选择,如果您有一个宽松的 sudo 配置(可能因为只有您,或者所有 sudoers 都有真正的 root 访问权限),则运行visudo
并添加Defaults env_keep="VISUAL EDITOR"
以允许所有 sudoers 指定他们自己的(即保留该环境变量)。
您现有的 sudoers 文件可能已经有(或包含)一个或多个 env_keep 语句,例如这个(来自 pastebin 示例):
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
第一行将env_keep
覆盖您在其上方所做的任何编辑(分配),其他行将扩展列表(+=
)。为了让一切按照您习惯的方式工作,除非您有理由更改设置,否则我建议立即添加一行后那些:
Defaults env_keep += "VISUAL EDITOR"
(还有其他选项可以使用您喜欢的编辑器,但它们要么不必要地复杂,要么过于宽容和危险,因此您必须阅读man sudoers
,自己弄清楚,并了解可能存在哪些相关问题。)
答案2
这对你有用吗?
sudo VISUAL=vim crontab -e
它对我有用。(Debian 10 buster)