# Ausführen von Skripten



## oraclin25 (11. Dezember 2012)

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


----------



## sheel (11. Dezember 2012)

Hi

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

Siehe PATH.


----------



## deepthroat (11. Dezember 2012)

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 (11. Dezember 2012)

Hallo sheel und deepthroat,


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


----------



## deepthroat (11. Dezember 2012)

oraclin25 hat gesagt.:


> Hallo sheel und deepthroat,
> 
> 
> ```
> ...


Nein, darum geht es nicht. Es gibt einen Suchpfad der festlegt wo die Shell noch Programmen sucht. Das ist die PATH Variable.  "man bash".


oraclin25 hat gesagt.:


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


----------



## oraclin25 (11. Dezember 2012)

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 (11. Dezember 2012)

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


```
ls ./unterordner
```


```
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 (12. Dezember 2012)

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

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

```
export PATH=$PATH:/home/username/bin
```
In  dem Verzeichnis legst du dann einfach alle deine Skripte ab, auf die zugreifen willst.


----------

