Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

PATH-Umgebung und Reihenfolge der Abarbeitung

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Gandor
Newbie
Newbie
Beiträge: 15
Registriert: 7. Jul 2004, 22:37

PATH-Umgebung und Reihenfolge der Abarbeitung

Beitrag von Gandor »

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?
Benutzeravatar
snaewe
Hacker
Hacker
Beiträge: 415
Registriert: 13. Dez 2004, 16:32
Wohnort: Zu Hause

Re: PATH-Umgebung und Reihenfolge der Abarbeitung

Beitrag von snaewe »

Gandor hat geschrieben: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 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...
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
Der Name Windows stammt ursprünglich aus dem Indianischen und
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
Gandor
Newbie
Newbie
Beiträge: 15
Registriert: 7. Jul 2004, 22:37

Beitrag von Gandor »

Ö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:
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3175
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

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: Alles auswählen

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
Gandor
Newbie
Newbie
Beiträge: 15
Registriert: 7. Jul 2004, 22:37

Beitrag von Gandor »

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??
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

Gandor 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...
in deinem $HOME erstellst du ein Verzeichnis bin, also $HOME/bin
dorthin kopierst du deinen Wrapper xx. Dieser sieht dann so aus:

Code: Alles auswählen

#!/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....
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Antworten