Script starten ohne sh oder ./

F

fantaeiner

Mitglied
Thread Starter
Dabei seit
09.11.2014
Beiträge
84
Reaktionspunkte
5
Hallo,

könnt ihr mir erklären, warum ich ein BASH-Script im Terminal mit sh oder ./programmname starten muss?

Gibt es auch einen Weg, das Script direkt mit programmname zu starten, nachdem es mit chmod+x ausführbar gemacht wurde?

Wozu ist der Befehl chmod +x überhaupt gut, wenn das Script doch mit sh gestartet werden muss?

Viele Grüße
Fantaeiner
 
mit sh musst du es an sich nur starten, wenn im script oben das shebang fehlt (das #! wo der befehlt mit bei steht).
./ steht übrigens für aktuelle verzeichnis.

wenn du es nur mit programmname starten willst, muss es halt im PATH sein.
d.h. in einen der ordner, wo die shell nach programmen sucht.
mit echo $PATH siehst du die z.b.
normal packt man solche programmen nach /usr/local/bin

chmod+x macht es dir halt so als programm ausführbar ohne sh …
 
Vielen Dank für die Antwort. Und im aktuellen Verzeichnis wird nicht standardmäßig nach diesem ausführbaren Programm gesucht? Sondern nur in den Verzeichnissen, die im PATH stehen?
 
Und weil das aktuelle Verzeichnis nicht in PATH steht, geht das mit dem direkten Aufrufen der Skripte nicht? Oder habe ich das falsch verstanden?
 
Richtig!
Es macht ja auch keinen Sinn, wenn der Computer in allen Verzeichnissen nach Befehlen bzw. Programmen automatisch suchen täte. Entweder es steht in einem Standard-Verzeichnis für sowas, welche automatisch abgesucht werden oder man gibt den konkreten Pfad an. Wenn man zufällig in dem jeweiligen Verzeichnis ist, reduziert sich die Angabe auf ein "./". Genausogut könnte man aber den absoluten Pfad nehmen, der immer und überall funktioniert, wie z.B. ./user/ichbins/meineprogramme/machtwasganztolles.sh .
 
./user/ichbins/meineprogramme/machtwasganztolles.sh
ist kein absoluter Pfad.
Ein absoluter Pfad beginnt immer im Root Verzeichnis also mit einem /
Du meintest wohl:
/User/ichbins/meineprogramme/machtwasganztolles.sh

Gruß
maceis
 
Nach der Aufnahme des Pfades in PATH geht das. Mir ist aber noch immer nicht klar, warum Terminal nicht erst einmal im aktuellen Verzeichnis nach der namentlich benannten Datei schaut, um dann im Anschluss die PATH-Verzeichnisse durchzugehen
 
so könnte man dir z.b. unbemerkt ein system binary ersetzen …
daher solltest du auch den . nicht vorne im PATH haben …
 
Sicherheit. Wurde hier doch schon genannt.

Mach doch einfach mal google an, da wird das sicher auf stackexchange oder einer ähnlichen Seite ausführlich erklärt.
 
Die Welt hinter dem Terminal ist nicht dazu gedacht, Dir das Leben schön zu machen sondern logisch zu sein.
All Deine Fragen lassen sich damit beantworten: Weil es sicherer ist.
Du musst explizit ein Script ausführbar machen, da hier zwischen Dokumenten und Ausführbaren Dateien unterschieden wird. (Aus Sicherheitsgründen)
Genau so mit der Pfadangabe. Du musst dem System exakt sagen, was Du ausführen willst.
Wenn ich jetzt in Deinem Home-Verzeichnis ein Schadprogram hinlege und es gcc nenne, wirst Du es immer dann ausführen, wenn Du eigentlich
/usr/bin/gcc ausführen wolltest. Und Du merkst es nicht mal.
Also musst Du den exakten Pfad angeben - ./ ist nur die Abkürzung für das aktuelle Verzeichnis
 
Zurück
Oben Unten