Mac で visudo エディタに emacs を使用すると /etc/sudoers ファイルが開かない

Mac で visudo エディタに emacs を使用すると /etc/sudoers ファイルが開かない

Mac で を使ってファイルemacsを編集したいのですが、どうしてもできません。ファイル内の以下の設定をすべて試しましたが、効果はありませんでした。sudoersvisudosudoers

  • Defaults editor = "/usr/bin/emacs"emacsイントロ画面を表示します
  • Defaults editor = "/usr/bin/emacs visudo"「visudo」という名前の新しいファイルを作成します
  • Defaults editor = "/usr/bin/emacs sudoers"sudoersファイルを読み取り専用バッファとして開きます
  • EDITOR="/usr/bin/emacs"シェルで実行(またはファイル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

関連情報