我想在我的 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 不會像其他編輯器一樣將「--」解釋為「參數結束」及其後面的所有內容作為檔案名,而是顯示介紹畫面。我所知道的最簡單的解決方法是包裝器:emacs
/usr/bin/emacs -- /etc/sudoers.tmp
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