带有参数的 Unix 环境变量

带有参数的 Unix 环境变量

我试图将 $EDITOR 变量设置为没有窗口的 emacs,因此调用它的命令是emacs -nw。但是,如果我像这样设置它:

export EDITOR="/Applications/Emacs.app/Contents/MacOS/Emacs -nw"

我收到以下错误

zsh: no such file or directory: /Applications/Emacs.app/Contents/MacOS/Emacs -n

答案1

我相信这是行不通的,因为 shell 会尝试打开文件名中包含空格的二进制文件,所以Emacs -nw,而不是打开Emacs,然后-nw作为选项传递。

如何制作$EDITOR一个小的(可执行)脚本,例如~/bin/EDITOR

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs -nw -- "$@"

然后,只需添加到你的 shell 的配置中:

export EDITOR=~/bin/EDITOR

现在,EDITOR将使用适当的参数调用脚本,在中扩展$@

答案2

如此处所述:zsh:未找到命令(对于 $EDITOR) ,zsh 将扩展的变量视为一个单词(其中包含空格字符)。

可能的解决方案包括:

  • 在 bash 中运行,可以正确扩展空间

  • 在参数扩展中使用“=”修饰符:参见扩张zsh文档中查找“${=spec}”

  • 调用 $EDITOR 时使用 eval,如下所示:

    eval $EDITOR file

相关内容