如果我尝试使用 Visual Studio Code(在 macOS 10.15 上)编辑我的 crontab,它会打开一个空文件,没有我的 crontab 的内容。
$ VISUAL='code' crontab -e
crontab: no changes made to crontab
我实际上并没有期望它能起作用(没有
-w
),但为了完整性而将其包括在内。但是当我添加 -w
时它仍然失败。
$ VISUAL="code -w" crontab -e
crontab: code -w: No such file or directory
crontab: "code -w" exited with status 1
我发现引用可能有些奇怪,但单引号和以下内容都没有修复任何问题:
$ function codew() {
function> code -w "$1"
function> }
$ export VISUAL='codew'
$ crontab -e
问题似乎是 crontab 的临时文件实际上并不存在。但我该如何解决这个问题呢?如何使用 VS Code 编辑 crontab?
touch ~/code-wait.sh
:#!/bin/bash
OPTS=""
if [[ "$1" == /tmp/* ]]; then
OPTS="-w"
fi
/usr/local/bin/code ${OPTS:-} -a "$@"
chmod 755 ~/code-wait.sh
.bashrc
或 .bash_profile
或 .zshrc
:export VISUAL=~/code-wait.sh
export EDITOR=~/code-wait.sh
EDITOR='code' crontab -e
这里的设置适合我。
.bashrc
## vscode
export VISUAL=/path/to/code-wait.sh
export EDITOR=/path/to/code-wait.sh
代码等待.sh
#!/bin/sh
code -w $*
这是一个相当复杂的问题,因为无法检测哪个工具调用首选编辑器。 TTY 是相同的,没有环境变量可以提供帮助。
尽管如此,我还是想出了一个解决方案,为临时文件启用前台模式(等待)。恕我直言,大多数(如果不是全部)使用外部编辑器并等待它们保存文件的工具都使用临时文件。
完整脚本位于 https://github.com/ssbarnea/harem/blob/master/bin/edit 但我将在此处包含主要片段:
#!/bin/bash
OPTS=""
if [[ "$1" == /tmp/* ]]; then
OPTS="-w"
fi
/usr/local/bin/code ${OPTS:-} -a "$@"
谢谢大家,对我有用,即使是在遥控器上。尽管路径不一致。我发现简单地删除路径确实有效。
#!/bin/bash
OPTS=""
if [[ "$1" == /tmp/* ]]; then
OPTS="-w"
fi
code ${OPTS:-} -a "$@"