Eu gostaria de usar emacs
para editar meu sudoers
arquivo visudo
no meu Mac, mas, de forma alguma, não consigo fazer isso acontecer. Eu tentei todas as seguintes configurações no sudoers
arquivo, sem sucesso:
Defaults editor = "/usr/bin/emacs"
mostra aemacs
tela de introduçãoDefaults editor = "/usr/bin/emacs visudo"
cria um novo arquivo chamado "visudo"Defaults editor = "/usr/bin/emacs sudoers"
abre o arquivo sudoers, mas como um buffer somente leitura- rodando
EDITOR="/usr/bin/emacs"
no shell (ouexport
transferindo-o para o meu~/.bash_profile
arquivo) e, em seguida, rodandovisudo
comDefaults env_keep+="EDITOR"
mostra aemacs
tela de introdução Defaults editor = "emacs"
diz que aeditor
variável deve começar com/
Defaults editor = /usr/bin/emacs
mostra a tela de introduçãoDefaults editor = "/usr/bin/emacs -u matt"
mostra a tela de introdução
Basicamente, nada do que eu faço funciona. O que estou fazendo de errado?
Estou executando o macOS High Sierra (10.13).
Responder1
A questão é que visudo
funciona emacs
assim: /usr/bin/emacs -- /etc/sudoers.tmp
. O Emacs não interpreta '--' como 'fim dos argumentos' e tudo depois dele como nomes de arquivos como outros editores, mas mostra a tela de introdução. A maneira mais fácil de contornar isso que conheço é um wrapper:
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