Ich muss ein auf / opt / godi / sbin installiertes Programm ausführen (ein benutzerdefiniertes Verzeichnis). Wenn ich dieses Verzeichnis meinem PATH hinzufüge, fügen Sie meiner .bashrc-Datei die folgende Zeile hinzu
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Dann kann ich versuchen, den Befehl ganz gut auszuführen (außer dass er fehlschlägt, weil er sudo benötigt). Wenn ich jedoch versuche, sudo zu verwenden:
sudo godi_console
Ich erhalte den folgenden Fehler
sudo: godi_console: command not found
Wenn Sie die PATH-Variable nach der Verwendung von sudo untersuchen, werden Sie feststellen, 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 PFAD nicht derselbe? Mache ich etwas falsch? Ich bin auf Debian Jessie und kann das Problem leider nicht umgehen, indem ich sudo den absoluten Link zu godi_console übergebe, da godi_console selbst auch davon abhängt, ob PATH richtig eingestellt ist.
sudo -E godi_console
.-E
bedeutet "Umwelt schützen".secure_path
und / oder env_reset so konfiguriert sind, wie es in vielensudo
Implementierungen wie unter Debian der Fall ist .su
nichtsudo
, ist unix.stackexchange.com/questions/460478 .Antworten:
Sie können immer tun:
Hat aus Sicherheitsgründen unter Debian
/etc/sudoers
diesecure_path
Option auf einen sicheren Wert gesetzt.Beachten Sie, dass:
Wo
sudo
behandelt Argument enthält führende=
Zeichen als Umgebungsvariable Zuordnungen von selbst, würde auch bei laufenden Arbeitengodi_console
mit Ihrem$PATH
(im Gegensatz zu demsecure_path
in seiner Umgebung), würde aber keinen Einfluss aufsudo
für ausführbare ‚s Suchpfad, so würde nicht helfensudo
bei der Suche nach, dassgodi_console
.quelle
sudo "PATH=$PATH" godi_console
hat übrigens nicht in CentOs7 funktioniert. Benötigte die Umweltsudo "PATH=$PATH" godi_console
überhaupt?sudo
nimmtVAR=value
Argumente, die Umwelt des Befehls beeinflusst es läuft, aber anders als inenv
oderbash
,sudo
scheint nicht so berührt zu lassen , wie es den Befehl nachschlägt. Ich habe dies (vor kurzem) nur auf Ubuntu 16.04 getestet. Aber ich habe versucht, dieexempt_group
Option hinzuzufügensudoers
(nur zum Testen - ich halte dies nicht für eine Lösung!) Und die Ergebnisse waren aufschlussreich. Die Befehle des FormularsPATH="$PATH" sudo some-command
begannen zu funktionieren, die des Formulars jedochsudo PATH="$PATH" some-command
immer noch nicht.Sie können den Standard-PFAD auch auf einstellen
/etc/sudoers
Bearbeiten Sie die Datei mit
visudo
und aktualisiere die Zeile nach Belieben:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
quelle
SUDO setzt die Umgebungsvariablen standardmäßig zurück.
Lesen Sie das Handbuch und die Option env_reset.
Sie müssen es nur in / etc / sudoers deaktivieren.
quelle
env_reset
scheint dassudo
Verhalten von PATH nicht zu beeinflussen .Das funktioniert :
Beispiel für den Aufruf meines
gps
Skripts, in dem die Prozesse der Nvidia-GPU aufgelistet sind:Erklärung:
quelle
Dadurch wird "secure_path" auf meiner Seite außer Kraft gesetzt
quelle
Das hat funktioniert:
Ändern Sie $ PATH nicht mit Ihrem Pfadwert, sondern schreiben Sie es einfach so
Beispiel:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
quelle
Vielleicht nicht genau das, wonach OP fragt, aber das könnte helfen:
Dies ändert den Pfad innerhalb des sudoed-Befehls.
Edit: Ich bin mir nicht sicher, was ich damit gemeint habe, da das oben so ziemlich Unsinn ist. Verwenden Sie stattdessen Folgendes:
quelle