Kommando in PATH wird mit sudo nicht gefunden

Nils Kassube kassube at gmx.net
Don Jul 26 19:07:39 BST 2007


Christoph Bier wrote:
> Nils Kassube schrieb am 26.07.2007 17:08:
> > Christoph Bier wrote:
> >> ich habe hier ein merkwürdiges Problem, das auch nur auf meinem
> >> Bürorechner auftritt; meine Rechner zu Hause (Desktop, Laptop) --
> >> alle drei Rechner benutzen das gleiche Home-Verzeichnis -- haben das
> >> Problem nicht.
>
> Auf meinen Rechnern zu Hause habe ich die TeXLive-Installation auch
> leicht modifiziert durchgeführt. Ich hatte die Option gewählt, Links
> für die Binaries in Systemverzeichnissen (/usr/local/bin) anzulegen,
> wie ich gerade wieder in meinen Aufzeichnungen gefunden habe. Das
> Dunkel lichtet sich.

OK, das Homeverzeichnis ist eben nicht alleine maßgeblich. Wenn die 
Installationen unterschiedlich sind, erklärt das natürlich einiges.

> Danke! sudo ist mir nach wie vor fremd, weshalb es auf jedem Rechner
> auch noch Root gibt. Aber mittlerweile schätze ich den Komfort von
> sudo, weshalb ich von »su -« wegkommen will.

Ich denke, es ist gelegentlich schon sinnvoll, als root eingeloggt zu 
sein. Vor jedem Befehl sudo tippen zu müssen ist doch arg lästig, wenn es 
um mehr als nur 2-3 Befehle geht. Außerdem hat man eine getrennte 
Befehlshistory, was ich sehr schätze. Allerdings verwende ich "sudo su", 
so dass ich kein Password für root setzen muss.

> 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.

> 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.


Nils