• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

PATH-Umgebung und Reihenfolge der Abarbeitung

Gandor

Newbie
Nach welcher Reihenfolge durchsucht Linux die
PATH-Umgebungsvariable, wenn ich den Namen einer Datei in der Shell eingebe??

Wenn ich ein Programm "xx" habe, das ich immer mit bestimmten Parametern starten will, wird dann (im gleichen Verzeichnis) zuerst
"xx" oder mein "xx.sh" gestartet? Umbenennen möchte ich das Skript
nicht...

Kennt da jemand einen Trick?
 

snaewe

Hacker
Gandor schrieb:
Nach welcher Reihenfolge durchsucht Linux die
PATH-Umgebungsvariable, wenn ich den Namen einer Datei in der Shell eingebe??
In der Reihenfolge, die bei 'echo $PATH' ausgegeben wird, also
von vorne nach hinten.

Gandor schrieb:
Wenn ich ein Programm "xx" habe, das ich immer mit bestimmten Parametern starten will, wird dann (im gleichen Verzeichnis) zuerst
"xx" oder mein "xx.sh" gestartet? Umbenennen möchte ich das Skript
nicht...
Wenn Du 'xx' startest, wird 'xx' im Pfad gesucht. 'xx.sh' wird
gesucht, wenn Du 'xx.sh' startest/eingibst. Wenn das 'xx' im aktuellen Verzeichnis liegt, wird es nur gestartet (bei Eingabe von 'xx') wenn PATH '.' enthält. Ist '.' nicht in PATH, musst du './xx' eingeben um das 'xx' im aktuellen Verzeichnis zu starten.

Stefan
 
OP
G

Gandor

Newbie
Öhm, klingt logisch...

mein Problem ist halt, ich habe eine "xx"-Datei, die das Programm startet; ich hätte aber gerne eine eigene "xx"-Datei, die das Prog mit meinen Parametern startet, am besten im gleichen Verzeichnis mit dem gleichen Namen...
Also statt der "xx"-Binary ein "xx"-Shell-Skript, mit dem dann das "xx"-Programm mit Parametern gestartet wird...

Ich drücke mich recht wirr aus, hoffe ihr versteht mich... :oops:
 
A

Anonymous

Gast
Das ganze funktioniert aber auch nur wenn es sich wirklich um ein Programm handelt und nicht etwa um einen Kommando das in der bash selbst enthalten ist, wie zB test, trap, echo usw.
Code:
export PATH=.:$PATH
sollte dafür sorgen, dass zuerst immer das aktuelle Verzeichniss durchsucht wird. Wenn du also im aktuellen Verzeichniss eine ausführbare Datei xx hast dann kannst du damit /usr/bin/xx -a -b -c starten, allerdings musst du dann in diesem Script immer den vollen Path zum richtigen Programm angeben, sonst kommt es dazu dass durch den Export von PATH sich das Programm rekursiv selbst aufruft. (fatal)

in ein und dem selben Verzeichniss 2 Dateien mit dem selben Namen(zB /usr/bin/xx Script und /usr/bin/xx Binary geht nicht) Dann müsstest du das script in ein anders Verzeichniss setzen dass in deinem PATH vor /usr/bin kommt, aber vorsichtig wenn andere Scripte des Betriebssystems dann diesen Befehl absetzen, kann es unter umständen dazu führen, dass statt den binary das script gestartet wird.(fatal)

robi
 
OP
G

Gandor

Newbie
Ich habs jetzt doch auf einen Skript mit einem ähnlichen, aber nicht dem Binary-Namen gleichen Namen eingestellt, damit es funktioniert...
Werd halt versuchen, mir den anderen Namen zu merken...

Aber mal für die Zukunft, wenn ich ausführbare Programme in /usr/bin oder /usr/local/bin habe, die Parameter erwarten und einen fiktiven Ordner /scripts habe, der in PATH aufgeführt ist und den Binaries gleichnamige Shell-Skripte enthält...
Wie würde ich Linux dazu bringen, erst in /scripts zu suchen??
 

oc2pus

Ultimate Guru
Gandor schrieb:
mein Problem ist halt, ich habe eine "xx"-Datei, die das Programm startet; ich hätte aber gerne eine eigene "xx"-Datei, die das Prog mit meinen Parametern startet, am besten im gleichen Verzeichnis mit dem gleichen Namen...
Also statt der "xx"-Binary ein "xx"-Shell-Skript, mit dem dann das "xx"-Programm mit Parametern gestartet wird...

in deinem $HOME erstellst du ein Verzeichnis bin, also $HOME/bin
dorthin kopierst du deinen Wrapper xx. Dieser sieht dann so aus:
Code:
#!/bin/bash
/usr/local/bin/xx <deine Parameter>

Nach /usr/local/bin kopierst du das Programm xx.

Deine PATH Variable änderst du dann so ab:
export PATH=$HOME/bin:/usr/local/bin:$PATH
Das kannst du übrigends in deiner .bashrc fest einstellen.

damit wird beim Aufruf von xx IMMER dein Wrapper-Script ausgeführt, weil es "weiter links" steht im PATH als das eigentliche Programm xx in /usr/local/bin.

Sollte es noch ein Programm xx in /usr/bin geben wird dies nur durch /usr/bin/xx aufrufbar sein....
 
Oben