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?
Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
PATH-Umgebung und Reihenfolge der Abarbeitung
Moderator: Moderatoren
Re: PATH-Umgebung und Reihenfolge der Abarbeitung
In der Reihenfolge, die bei 'echo $PATH' ausgegeben wird, alsoGandor hat geschrieben:Nach welcher Reihenfolge durchsucht Linux die
PATH-Umgebungsvariable, wenn ich den Namen einer Datei in der Shell eingebe??
von vorne nach hinten.
Wenn Du 'xx' startest, wird 'xx' im Pfad gesucht. 'xx.sh' wirdGandor hat geschrieben: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...
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
Der Name Windows stammt ursprünglich aus dem Indianischen und
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
Ö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...
ops:
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...

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.
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
Code: Alles auswählen
export PATH=.:$PATH
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
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??
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??
in deinem $HOME erstellst du ein Verzeichnis bin, also $HOME/binGandor hat geschrieben: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...
dorthin kopierst du deinen Wrapper xx. Dieser sieht dann so aus:
Code: Alles auswählen
#!/bin/bash
/usr/local/bin/xx <deine Parameter>
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....
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
PackMan
LinWiki : Das Wiki für Linux User