Kommando in PATH wird mit sudo nicht gefunden

Christoph Bier christoph.bier at web.de
Fre Jul 27 08:09:40 BST 2007


Nils Kassube schrieb am 26.07.2007 20:07:

> Christoph Bier wrote:
>> Nils Kassube schrieb am 26.07.2007 17:08:

[...]

>> chris at bzb:~$ sudo sh -c 'echo $PATH'
>> Password:
>> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
>> /sbin:/bin:/usr/X11R6/bin
>>
>> Treffer! Aber wie kommt dann das zustande?:
>>
>> $ su -
>> Password:
>> root at bzb:~# echo $PATH
>> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
>> /bin:/usr/bin/X11:/usr/local/texlive/2007/bin/i386-linux
> 
> Es ist für die Shell ein Unterschied, ob sie interaktiv aufgerufen wird 
> oder nicht. Davon abhängig werden unterschiedliche 
> Initialisierungsdateien aufgerufen. Eine interkative shell startet eine 
> der folgenden Dateien ~/.bash_profile oder ~/.bash_login 
> oder /etc/profile je nachdem, welche in dieser Reihenfolge zuerst 
> gefunden wird. Ist es dagegen eine Subshell, wie über den befehl sudo, 
> wird statt dessen ~/.bashrc gelesen. Ich vermute mal, 
> dass /usr/local/texlive/2007/bin/i386-linux nur in einer der 3 zuerst 
> genannten Dateien steht, nicht aber in ~/.bashrc. Wenn du das überprüfen 
> willst, denke bitte daran, dass es sich hierbei um /root als 
> Homeverzeichnis für root gilt.

Danke für die Erläuterung! Aber doch
/usr/local/texlive/2007/bin/i386-linux habe ich höchstpersönlich in
/root/.bashrc eingetragen.

$ tail -3 /root/.bashrc
# TeXLive 2007 zum Pfad hinzufügen:
PATH=$PATH:/usr/local/texlive/2007/bin/i386-linux
export PATH

Ansonsten gibt es nur profile (und bash_history) in /root.

>> Und wie komme ich mit sudo an Shell-Funktionen?
> 
> sudo sh -c 'Befehl'
> 
> Aber vorher solltest du überlegen, ob das sinnvoll ist. Wenn man z.B. eine 
> Umgebungsvariable der Subshell verändert, klappt das schon. Aber beim 
> nächsten Aufruf ist die Umgebungsvariable wieder verschwunden, denn man 
> bekommt eine neue Subshell.
> 
> Anderes Beispiel: Die Befehlsfolge
> 
> sudo sh -c 'cd /'
> sudo sh -c 'echo *'
> 
> hat nicht unbedingt den erwarteten Effekt -- es wird nicht der Inhalt 
> von / aufgelistet, sondern der des aktuellen Verzeichnisses beim Aufruf 
> von sudo. Hier müsste man statt dessen schreiben:
> 
> sudo sh -c 'cd /;echo *'
> 
> Das Beispiel diente natürlich nur zur Demonstration, denn man benötigt ja 
> keine root-Rechte, um / aufzulisten.

Auch hierfür danke!

Grüße
Christoph
-- 
+++ Typografie-Regeln: http://zvisionwelt.de/downloads.html (1.6)