usando o emacs para o editor visudo não abrindo o arquivo /etc/sudoers no Mac

usando o emacs para o editor visudo não abrindo o arquivo /etc/sudoers no Mac

Eu gostaria de usar emacspara editar meu sudoersarquivo visudono meu Mac, mas, de forma alguma, não consigo fazer isso acontecer. Eu tentei todas as seguintes configurações no sudoersarquivo, sem sucesso:

  • Defaults editor = "/usr/bin/emacs"mostra a emacstela de introdução
  • Defaults 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 (ou exporttransferindo-o para o meu ~/.bash_profilearquivo) e, em seguida, rodando visudocom Defaults env_keep+="EDITOR"mostra a emacstela de introdução
  • Defaults editor = "emacs"diz que a editorvariável deve começar com/
  • Defaults editor = /usr/bin/emacsmostra a tela de introdução
  • Defaults 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 visudofunciona emacsassim: /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

informação relacionada