select-editor专为crontab等命令设计,只影响用户级EDITOR行为,不改系统全局设置;它将选择写入~/.selected_editor,优先级高于环境变量EDITOR。

select-editor 命令到底管不管 crontab
管,而且是专为这类场景设计的。它不改系统全局默认编辑器,只影响 crontab -e、git commit、sudoedit 等明确依赖 EDITOR 或 sensible-editor 的命令。你运行 select-editor 后选中的编辑器,会被写入用户级配置(通常是 ~/.selected_editor),下次 crontab -e 就直接调用它,不会弹选项。
为什么 export EDITOR 不总是生效
常见失效原因有三个:
-
crontab进程可能由 root 或其他用户启动,而你在当前 shell 里执行的export EDITOR=...只对当前会话有效,且不继承给子进程(尤其 cron daemon 自己 fork 的) - 某些发行版(如 Debian/Ubuntu)优先读取
~/.selected_editor,会忽略环境变量;只有该文件不存在时才 fallback 到EDITOR - 你设置了
EDITOR,但没重载 shell 配置,或没在正确配置文件里写(比如用了~/.bashrc,但实际登录用的是 zsh,则要写进~/.zshrc)
三种修改方式怎么选:select-editor vs update-alternatives vs EDITOR
按优先级和适用范围排序:
-
select-editor:最推荐,面向用户,安全、可逆、不影响他人。适合只想让自己的crontab -e用nano或vim.tiny的人 -
sudo update-alternatives --config editor:系统级变更,会影响所有用户调用editor命令的行为(比如sudoedit、部分 GUI 工具),但对crontab -e不一定生效(取决于发行版实现) -
export EDITOR=/usr/bin/nano+ 写入~/.bashrc:临时兜底方案,仅当~/.selected_editor缺失且你确定 shell 环境能正确加载时才可靠
选完编辑器后 crontab -e 还报错怎么办
典型错误是:crontab: "/usr/bin/sensible-editor" exited with status 1。这说明系统试图调用的编辑器路径不对,或者权限/环境缺失。检查这几项:
- 确认你选的编辑器真实存在:
ls -l /usr/bin/vim.basic或which nano - 别选
/bin/ed—— 它不是交互式编辑器,crontab -e会卡住或立即失败 - 如果用的是
vim.tiny,它可能不支持语法高亮或某些快捷键,但至少能保存退出;vim.basic功能更全些 - root 用户需单独运行
select-editor,普通用户设置不影响 root 的crontab -e
~/.selected_editor,没有“统一设置”这回事。哪怕你用 sudo select-editor,也只是在 root 家目录下写配置——这点不看清,就会反复踩坑。


















