Verwenden von Emacs für den Visudo-Editor, ohne die Datei / etc / sudoers auf dem Mac zu öffnen

1

Ich würde gerne emacsmeine sudoersDatei mit visudomeinem Mac bearbeiten , aber für mein ganzes Leben kann ich es nicht schaffen. Ich habe alle folgenden Konfigurationseinstellungen in der sudoersDatei ohne Erfolg versucht :

  • Defaults editor = "/usr/bin/emacs"zeigt den emacsIntro-Bildschirm
  • Defaults editor = "/usr/bin/emacs visudo" Erstellt eine neue Datei mit dem Namen "visudo"
  • Defaults editor = "/usr/bin/emacs sudoers" öffnet die sudoers-Datei, jedoch als schreibgeschützter Puffer
  • Laufen Sie EDITOR="/usr/bin/emacs"in der Shell (oder exportin meiner ~/.bash_profileDatei) und dann visudomit Defaults env_keep+="EDITOR", wird der emacsIntro-Bildschirm angezeigt
  • Defaults editor = "emacs"sagt, dass die editorVariable mit beginnen muss/
  • Defaults editor = /usr/bin/emacs zeigt den Intro-Bildschirm
  • Defaults editor = "/usr/bin/emacs -u matt" zeigt den Intro-Bildschirm

Grundsätzlich funktioniert nichts, was ich tue. Was mache ich falsch?

Ich verwende macOS High Sierra (10.13).

Matt
quelle
laut man visudo(auf ubuntu) wird visudo verwenden /usr/bin/editor(welche gehen nach / bin / nano), hast du das gecheckt?
Archemar
/usr/bin/editorexistiert nicht auf einem Mac
Matt
schade ! :( Ich habe mich nicht darum
gekümmert
Benutzt du sudo visudo? Wenn nicht, haben Sie keine Berechtigung zum Schreiben der Datei.
Barmar
@Barmar yup Ich mache das auf jeden Fall: P
Matt

Antworten:

2

Das Problem ist , dass visudoläuft emacswie folgt aus : /usr/bin/emacs -- /etc/sudoers.tmp. Emacs interpretiert '-' nicht als 'Ende der Argumente' und alles danach als Dateinamen wie andere Editoren, sondern zeigt stattdessen den Intro-Bildschirm an. Der einfachste Weg, den ich kenne, ist ein 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
kaka
quelle