usar emacs para visudo editor no abrir el archivo /etc/sudoers en Mac

usar emacs para visudo editor no abrir el archivo /etc/sudoers en Mac

Me gustaría usarlo emacspara editar mi sudoersarchivo usando visudomi Mac, pero por mi vida, no puedo lograr que esto suceda. Probé todas las siguientes configuraciones en el sudoersarchivo, sin éxito:

  • Defaults editor = "/usr/bin/emacs"muestra la emacspantalla de introducción
  • Defaults editor = "/usr/bin/emacs visudo"crea un nuevo archivo llamado "visudo"
  • Defaults editor = "/usr/bin/emacs sudoers"abre el archivo sudoers, pero como un buffer de solo lectura
  • ejecutar EDITOR="/usr/bin/emacs"en el shell (o exportenviarlo a mi ~/.bash_profilearchivo), luego ejecutar visudocon Defaults env_keep+="EDITOR"muestra la emacspantalla de introducción
  • Defaults editor = "emacs"dice que la editorvariable debe comenzar con/
  • Defaults editor = /usr/bin/emacsmuestra la pantalla de introducción
  • Defaults editor = "/usr/bin/emacs -u matt"muestra la pantalla de introducción

Básicamente, nada de lo que hago funciona. ¿Qué estoy haciendo mal?

Estoy ejecutando macOS High Sierra (10.13).

Respuesta1

El problema es que visudofunciona emacsasí: /usr/bin/emacs -- /etc/sudoers.tmp. Emacs no interpreta '--' como 'fin de argumentos' y todo lo que sigue como nombres de archivo como otros editores, sino que muestra la pantalla de introducción. La forma más sencilla de solucionar esto que conozco es un contenedor:

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

información relacionada