使用 emacs 進行 visudo 編輯器無法在 Mac 上開啟 /etc/sudoers 文件

使用 emacs 進行 visudo 編輯器無法在 Mac 上開啟 /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文件中),然後運行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

相關內容