在 Mac 上使用 emacs 作为 visudo 编辑器无法打开 /etc/sudoers 文件

在 Mac 上使用 emacs 作为 visudo 编辑器无法打开 /etc/sudoers 文件

我想在 Mac 上使用emacs来编辑我的sudoers文件visudo,但无论如何都无法实现。我尝试了文件中的以下所有配置设置sudoers,但无济于事:

  • Defaults editor = "/usr/bin/emacs"显示emacs简介屏幕
  • Defaults editor = "/usr/bin/emacs visudo"创建名为“visudo”的新文件
  • Defaults editor = "/usr/bin/emacs sudoers"打开 sudoers 文件,但作为只读缓冲区
  • EDITOR="/usr/bin/emacs"在 shell 中运行(或export将其添加到我的~/.bash_profile文件中),然后运行visudoDefaults env_keep+="EDITOR"显示emacs简介屏幕
  • Defaults editor = "emacs"editor变量必须以/
  • Defaults editor = /usr/bin/emacs显示简介屏幕
  • Defaults editor = "/usr/bin/emacs -u matt"显示简介屏幕

基本上,我所做的一切都没有效果。我做错了什么?

我正在运行 macOS High Sierra (10.13)。

答案1

问题是visudo运行emacs如下:/usr/bin/emacs -- /etc/sudoers.tmp。Emacs 不会像其他编辑器一样将“--”解释为“参数结束”,并将其后的所有内容解释为文件名,而是显示简介屏幕。我知道的最简单的解决方法是使用包装器:

bash-3.2$ sudo cat > /usr/bin/emacs-visudo-wrapper.sh << 'EOF'
#!/bin/sh
set -eu
ARGS=()
for var in "$@"; do
   [ "$var" != '--' ] && ARGS+=("$var")
done
exec /usr/bin/emacs "${ARGS[@]}"
EOF
bash-3.2$ sudo chown root:wheel /usr/bin/emacs-visudo-wrapper.sh
bash-3.2$ sudo chmod 755 /usr/bin/emacs-visudo-wrapper.sh
bash-3.2$ sudo cat >> /etc/sudoers << 'EOF'
Defaults    editor = "/usr/bin/emacs-visudo-wrapper.sh"
EOF

相关内容