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"
シェルで実行(またはファイル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