我该如何在VS Code中编辑crontab?

15

如果我尝试使用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编辑crontabs?


包含你正在使用的操作系统可能会有所帮助(似乎是Mac或Linux?) - Alex
3个回答

12
  1. 创建一个文件 touch ~/code-wait.sh
#!/bin/bash
OPTS=""
if [[ "$1" == /tmp/* ]]; then
    OPTS="-w"
fi

/usr/local/bin/code ${OPTS:-} -a "$@"
  1. 使这个文件可执行:
chmod 755 ~/code-wait.sh 
  1. 将以下代码添加到您的.bashrc.bash_profile.zshrc文件中:
export VISUAL=~/code-wait.sh
export EDITOR=~/code-wait.sh
  1. 运行指令:
EDITOR='code' crontab -e

P.S: echo $SHELL - 用于检查您正在使用的 shell。 - Dmitry Grinko
2
它是做什么的? - fotoflo
它只是帮助您使用VSCode编辑器来编辑cron作业文件。 - Dmitry Grinko
4
但是,它的作用是什么?它看起来像是获取其他命令行参数并以某种方式将它们添加到打开vscode的调用中? - fotoflo
1
我不得不使用/opt/homebrew/bin/code而不是/usr/local/bin/code。我正在使用macOS Sonoma,而VSCode是通过Homebrew安装的。你可以运行which code来获取code可执行文件的路径。 - undefined
显示剩余6条评论

2

这里的设置对我有用。

.bashrc

## vscode
export VISUAL=/path/to/code-wait.sh
export EDITOR=/path/to/code-wait.sh

code-wait.sh

#!/bin/sh
code -w $*

1
这是一个非常复杂的问题,因为无法检测到哪个工具调用了首选编辑器。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 "$@"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接