Me gustaría usarlo emacs
para editar mi sudoers
archivo usando visudo
mi Mac, pero por mi vida, no puedo lograr que esto suceda. Probé todas las siguientes configuraciones en el sudoers
archivo, sin éxito:
Defaults editor = "/usr/bin/emacs"
muestra laemacs
pantalla de introducciónDefaults 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 (oexport
enviarlo a mi~/.bash_profile
archivo), luego ejecutarvisudo
conDefaults env_keep+="EDITOR"
muestra laemacs
pantalla de introducción Defaults editor = "emacs"
dice que laeditor
variable debe comenzar con/
Defaults editor = /usr/bin/emacs
muestra la pantalla de introducciónDefaults 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 visudo
funciona emacs
así: /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