Ich habe ein Programm, das in einem benutzerdefinierten Verzeichnis unter /opt installiert ist. Um die Ausführung zu vereinfachen, habe ich meine bashrc bearbeitet, um das besagte Verzeichnis zu meinem Pfad hinzuzufügen:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Dies funktioniert gut, wenn ich das Programm ohne sudo ausführen möchte. Wenn ich jedoch versuche, es mit sudo auszuführen, schlägt es mit einem „Befehl nicht gefunden“-Fehler fehl.
$ sudo godi_console
sudo: godi_console: command not found
Die Überprüfung der PATH-Variablen nach der Verwendung von sudo zeigt, dass sie nicht denselben PATH enthält, den ich als normaler Benutzer habe:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Warum ist der PATH nicht derselbe? Mache ich etwas falsch? Ich bin auf Debian Jessie, falls es einen Unterschied macht.
Eine Sache, die ich versucht habe, war, /opt/godi/sbin/godi_console direkt aufzurufen und den absoluten Pfad zur ausführbaren Datei zu übergeben. Leider hat das in diesem speziellen Fall nicht geholfen, da godi_console selbst davon abhängig ist, dass der PATH richtig gesetzt ist.
Akzeptierte Antwort:
Sie können immer:
sudo env "PATH=$PATH" godi_console
Als Sicherheitsmaßnahme unter Debian, /etc/sudoers
hat den secure_path
Option auf einen sicheren Wert gesetzt.
Beachten Sie Folgendes:
sudo "PATH=$PATH" godi_console
Wobei sudo
behandelt führende Argumente, die =
enthalten Zeichen als Umgebungsvariablenzuweisungen selbst, würde auch beim Ausführen von godi_console
funktionieren mit Ihrem $PATH
(im Gegensatz zum secure_path
) in seiner Umgebung, würde aber sudo
nicht beeinflussen ’s Suchpfad nach ausführbarer Datei, also würde sudo
nicht helfen beim Finden dieser godi_console
.