Я хотел бы использовать 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