Ich verwende Rubygems (1.3.7) mit Edelsteinen, die unter Ubuntu 10.10 Root-Rechte erfordern. Wenn ich mein Setup mit einem Ubuntu 9.10 mit Rubygems 1.3.6-Installation vergleiche, sehe ich folgenden Unterschied gem environment
:
1.3.7 / 10.10 - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
1.3.6 / 09.10 - EXECUTABLE DIRECTORY: /usr/bin
Die Ausgabe ist die gleiche, ob ich benutze sudo
oder nicht. Um dies zu beheben (ich weiß nicht, warum es überhaupt anders ist), habe ich versucht, meine Pfadvariable zu ändern.
Meine Frage ist, wo sucht sudo
man nach ausführbaren Dateien? Wenn ich ein Juwel installiere (mit sudo
), wird die ausführbare Datei /var
offensichtlich in den Pfad eingefügt. Ich habe diesen Pfad zu meinen ~/.profile
und /etc/environment
Dateien hinzugefügt , kann aber sudo
die ausführbaren Dateien nicht ausführen.
Wenn ich renne:
$ gemname
es läuft mein Werkzeug richtig.$ sudo gemname
es sagt mir nurcommand not found
.$ sudo echo $PATH
es tut den richtigen Weg zeigen.$ sudo -i gemname
es läuft richtig.$ sudo sudo -V
zeigt, dass der Pfad erhalten bleibt.
Tut sudo
Ehre ~/.profile
und / oder /etc/environment
? Wenn ja, warum kann es meine ausführbare Datei nicht finden, während das Verzeichnis in der $PATH
Umgebungsvariablen angezeigt wird?
Ich habe die Dokumentation von gelesen sudo
, ich habe auch eine Menge Themen zu Stackoverflow und Serverfault durchsucht und durchgesehen (zum Beispiel, wie man eine PATH-Umgebungsvariable in sudo überschreibt? Aber mein Beispiel zeigt, dass sie $PATH
den richtigen Pfad enthält), aber sie haben nie wirklich Zeigen Sie, wie Sie einen Edelstein über ausführen sudo
.
sudo echo \$PATH
produziert nur '$ PATH' für mich. aber dusudo sh -c 'echo $PATH'
machst den Trick. dankeGehen wir nach Teilen:
Das ist ok :)
gemname
ist nicht in deinem$PATH
Das ist cool: Die variable Erweiterung erfolgt, bevor bash das Programm ausführt. Wenn Sie dies ausführen, wird es für Ihren Benutzer erweitert,
$PATH
bevor Sie sudo aufrufen. Die an sudo übergebene Zeile lautet also eher wie folgt:sudo -i
läuft als Login-Shell und ehrt.profile
und / oder.login
. Wie auf derman
Seite steht:quelle
gemname
ist in seinem$PATH
, da sonst das erste Beispiel nicht funktionieren würde. Es ist nicht in der sanitären$PATH
, diesudo
(ohne-i
) verwendet.