![在 Mac 上使用 emacs 作为 visudo 编辑器无法打开 /etc/sudoers 文件](https://linux22.com/image/1542400/%E5%9C%A8%20Mac%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20emacs%20%E4%BD%9C%E4%B8%BA%20visudo%20%E7%BC%96%E8%BE%91%E5%99%A8%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%20%2Fetc%2Fsudoers%20%E6%96%87%E4%BB%B6.png)
我想在 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
文件中),然后运行visudo
并Defaults 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