использование emacs для редактора visudo не открывает файл /etc/sudoers на Mac

использование emacs для редактора visudo не открывает файл /etc/sudoers на Mac

Я хотел бы использовать emacsдля редактирования своего sudoersфайла visudoна моем Mac, но, черт возьми, я не могу этого сделать. Я пробовал все следующие настройки конфигурации в файле 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так: /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

Связанный контент