Ausführen von Skripten

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich habe gelernt, wenn ich ein Shell-Skript baue und es ausführe, dann muss ich entweder den absoluten Pfad bzw. relativen Pfad miteingeben. Aber wenn ich Standard-Skripte ausführe, wie zum Beispiel pwd oder ls, dann ist eine Pfadangabe nicht notwendig. Eigentlich ein bisschen widersprüchlich oder?

Schöne Grüße aus Rheinland,

Eure Ratna:p
 

sheel

I love Asm
Hi

ein paar bestimmte Verzeichnisse werden automatisch nach dem Befehl durchsucht,
dabei sind auch die Verz. von den Standardbefehlen.

Siehe PATH.
 

deepthroat

Erfahrenes Mitglied
Hi.

Zusätzlich gibt es je nach Shell noch Aliase, Funktionen und eingebaute Befehle.

Unter Bash ermittelt der eingebaute "type" Befehl was ausgeführt werden würde falls man "xyz" eingibt. siehe "help type".

Und siehe "man bash", PATH variable.
 

oraclin25

Erfahrenes Mitglied
Hallo sheel und deepthroat,

Code:
ein paar bestimmte Verzeichnisse werden automatisch nach dem Befehl durchsucht

naa.., in diesem Satz steckt der Teufel, glaube ich:

Angenommen, MeinSkript liegt im RatnasOrdner

Nun, auch wenn ich mich bereits im RatnasOrdner befinde, MUSS ich trotzdem die Pfadangabe ./ angeben, um MeinSkript auszuführen. Also, meiner Meinung nach, es geht NICHT darum, dass man sich dort befinden muss, wo das Skript vorliegt.

Ich nehme an, auch wenn ich zum Beispiel .../RatnasOrdner mit in die Umgebungsvariable PATH einfüge, muss ich trotzdem mit ./MeinSkript ausführen.

Schöne Grüße aus Rheinland,

Eure Ratna:p
 

deepthroat

Erfahrenes Mitglied
Hallo sheel und deepthroat,

Code:
ein paar bestimmte Verzeichnisse werden automatisch nach dem Befehl durchsucht

naa.., in diesem Satz steckt der Teufel, glaube ich:

Angenommen, MeinSkript liegt im RatnasOrdner

Nun, auch wenn ich mich bereits im RatnasOrdner befinde, MUSS ich trotzdem die Pfadangabe ./ angeben, um MeinSkript auszuführen. Also, meiner Meinung nach, es geht NICHT darum, dass man sich dort befinden muss, wo das Skript vorliegt.
Nein, darum geht es nicht. Es gibt einen Suchpfad der festlegt wo die Shell noch Programmen sucht. Das ist die PATH Variable. :google: "man bash".
Ich nehme an, auch wenn ich zum Beispiel .../RatnasOrdner mit in die Umgebungsvariable PATH einfüge, muss ich trotzdem mit ./MeinSkript ausführen.
Wie kommst du zu dieser Annahme?

Warum probierst du das nicht einfach aus.... :confused:
 

oraclin25

Erfahrenes Mitglied
Hallo deepthroat,

danke für die Antwort. Werde leider erst wieder morgen ausprobieren können, grad kein Unix in der Hand.

Viele Grüße aus Rheinland,

Eure Ratna
 

para_noid

hirnrissig
  1. Wenn ein Programm ohne Pfadangabe aufgerufen wird und es kein Built-In ist, wird NUR in den Verzeichnissen, die in $PATH stehen, danach gesucht. Es ist vollkommen irrelevant wo du bist.
  2. Brauchst du ein Programm, das nicht in den Standardverzeichnissen liegt, musst du der Shell sagen wo es liegt - auch wenn es im aktuellen Verzeichnis ist (sonst siehe 1.) - oder den Pfad zu diesem Programm in $PATH aufnehmen.

Dieser Umgang mit Programmaufrufen bietet einfach den Vorteil, Standardprogramme in wenigen Ordnern abzulegen und unabhängig des aktuellen Verzeichnisses aufrufen zu können. Dadurch ist man in dem von dir genannten Beispiel dazu gezwungen, "./" voranzustellen damit eben nicht in $PATH-Ordnern gesucht wird, im Gegensatz zu Dateien oder Verzeichnissen, die als Parameter übergeben werden.
Hier reicht es aus, statt z.B.

Code:
ls ./unterordner

Code:
ls unterordner

zu schreiben. Die zweite Version ist gleichbedeutend mit der ersten. Diese "Bequemlichkeitsform" ist bei Programmaufrufen aufgrund der oben genannten Implementierung eben nicht möglich.

Ich nehme an, auch wenn ich zum Beispiel .../RatnasOrdner mit in die Umgebungsvariable PATH einfüge, muss ich trotzdem mit ./MeinSkript ausführen.
Wenn du RatnasOrdner (als absoluten Pfad, nix mit Punkten) mit in $PATH nimmst, kannst du die Programme, die in diesem Verzeichnis liegen, auch ohne Pfadangabe ausführen; ansonsten unterscheidet dein Script sich nicht von den Standardprogrammen. Das sind ja auch nur irgendwelche ausführbaren Dateien, die in irgendwelchen Verzeichnissen herumliegen.
 

ikosaeder

Teekannen-Agnostiker
Ich glaube, die Verwirrung kommt daher, das unter DOS das aktuelle Verzeichnis, also ./ an erster Stelle im Suchpfad liegt, während unter Linux ./ nicht im Suchpfad liegt und auch nicht liegen sollte.
Wenn du den Ordner in PATH
Bash:
export PATH=$PATH:/home/username/RatnasOrdner
aufnimmst, kannst du das Skript auch ohne Pfadangabe aufrufen.
Alternativ kannst du in deinem HOME ein Verzeichnis "bin" anlegen und das in PATH aufnehmen.
Bash:
export PATH=$PATH:/home/username/bin
In dem Verzeichnis legst du dann einfach alle deine Skripte ab, auf die zugreifen willst.