Ich habe eine Bash-Funktion in einem globalen Bash-Code definiert, für deren Ausführung Root-Rechte erforderlich sind. Wie kann ich es mit sudo ausführen, z sudo myfunction
. Standardmäßig gibt es einen Fehler:
sudo: myfunction: befehl nicht gefunden
Antworten:
Luca hat mich freundlich auf diese Frage hingewiesen. Hier ist mein Ansatz: Erweitern Sie die Funktion / den Alias vor dem Aufruf von sudo und übergeben Sie sie vollständig an sudo, ohne dass temporäre Dateien erforderlich sind.
Erklärt hier auf meinem Blog . Es gibt eine Menge Angebotsabwicklung :-)
Der einzige Nachteil dieses Ansatzes besteht darin, dass nur die aufgerufene Funktion erweitert wird, keine zusätzlichen Funktionen, auf die Sie von dort aus verweisen. Kyles Ansatz geht damit wahrscheinlich besser um, wenn Sie auf Funktionen verweisen, die in Ihrem bashrc geladen sind (vorausgesetzt, sie werden beim
bash -c
Aufruf ausgeführt).quelle
Sie können
export
Ihre Funktion verwenden, um es einerbash -c
Subshell oder Skripten zur Verfügung zu stellen, in denen Sie es verwenden möchten.Bearbeiten
Dies funktioniert für direkte Subshells, leitet aber anscheinend
sudo
keine Funktionen weiter (nur Variablen). Selbst unter Verwendung von verschiedenen Kombinationen vonsetenv
,env_keep
und negiertenv_reset
nicht zu helfen scheint.Bearbeiten 2
Allerdings scheint es , dass
su
tut Unterstützung exportierten Funktionen.quelle
bash: your_function: command not found
. Ich benutzeUbuntu 11.04
undbash shell
.sudo -E bash -c 'your_function'
?Vielleicht können Sie tun:
Dies sollte funktionieren und erspart Ihnen die Eingabe von sudo in der Befehlszeile.
quelle
Wenn Sie eine Funktion im Kontext eines Sudo aufrufen müssen, möchten Sie Folgendes verwenden
declare
:quelle
Ich würde eine neue Shell ausführen, indem sudo die Shell selbst ausführt, dann wird die Funktion mit root-Rechten ausgeführt. Zum Beispiel so etwas wie:
Sie können auch dann gehen, um einen Alias für die
sudo bash
Leitung zu erstellen.quelle
quelle
Wie Legolas in den Kommentaren der Antwort von Dennis Williamson hervorhob, sollten Sie die Antwort von bmargulies auf eine ähnliche Frage lesen, die auf stackoverflow veröffentlicht wurde.
Ausgehend davon habe ich eine Funktion geschrieben, die dieses Thema behandelt und die Idee der Margulies im Grunde verwirklicht.
Anwendungsbeispiel:
Ausführen des folgenden Snippets
Wird ausgegeben
Wenn Sie dies in einer Shell verwenden möchten, die eine in Ihrem bashrc definierte Funktion aufruft, müssen Sie die vorherige exesudo-Funktion ebenfalls in dieselbe bashrc- Datei einfügen , wie im Folgenden beschrieben:
Dann musst du dich abmelden und wieder einloggen oder benutzen
Schließlich können Sie exesudo wie folgt verwenden:
quelle
/dev/shm/22481: No such file or directory
.