我想在 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