ich habe in /tmp eine Datei erstellt und diese „ls“ genannt. Der Inhalt der Datei ist „/bin/cat“.
Jetzt habe ich den Pfad /tmp in die PATH-Variable eingefügt.
Ich habe nun erwartet, dass wenn ich nun den Befehl „ls“ absetze, in Verbindung mit einem Dateinamen, mir diese Datei ausgegeben wird, so als hätte ich „cat Dateiname“ geschrieben.
Allerdings verhält es sich anders als erwartet. Der Cursor springt in die nächste Zeile und bleibt dort stehen, bis ich mit „Strg+C“ abbreche.
Worin liegt der Fehler? Hat vielleicht jemand eine Idee?
muesste klappen. Oh, und aufpassen, ls ist (manchmal) ein shell built-in, oder ein alias mit weiteren Optionen. In der zsh klappt es aber so wie oben angegeben.
leider liegt es auch nicht daran. Ich habe schon mehrere Variationen in PATH-Variable versucht. Ich habe auch einmal nur diesen Pfad probiert. Ohne Erfolg.
Es verhält sich so als würde man dem „cat“ Befehlt keine Datei übergeben.
Ich versteh das einfach nicht. Hast du noch eine Idee?
Ja, das ist der fehlende Teil. Du hattest cat aufgerufen, ohne die Parameter (den Dateinamen zu übergeben).
Daher wartet cat ewig auf Input und du musstest es mit Strg-C abbrechen.
Du darfst dir das nicht so vorstellen, daß hier eine Ersetzung vorgenommen wird, und aus
ls Dateiname
ein
cat Dateiname
wird. Viel mehr wird hier nur der Befehl cat ausgeführt, und wenn der keine weiteren Parameter bekommt, dann dann wartet der halt für alle Ewigkeiten.
Das Script bekommt den Parameter Dateiname übergeben, und steht dann in der Variablen $1 zur Verfügung. (Und ja, ein weiterer Parameter wäre dann $2
Das Script sollte daher so aussehen:
/bin/cat $1
Denn überleg mal, ein Script kann aus hunderten von Zeilen bestehen, in denen dein(e) Parameter an ein oder mehreren Stellen mittendrin benutzt werden. Wie sollte das so einfach funktionieren?
Nebenbei ist es nicht gut, einfach nur diese eine Zeile in eine Datei zu schreiben. besser wäre es z.B. so:
#!/bin/bash
cat $1
Die erste Zeile gibt an, daß dies eine Bash-Datei ist, und eben mit /bin/bash geöffnet werden soll. (Das ist anders als Windows, wo die Dateiendung dafür genutzt wird)
Und eigentlich brauchst du für den cat-Befehl nicht den Pfad angeben.
Okay. Vielen Dank für die antworten jetzt ist mir einiges klarer.
Aber mal angenommen ich wollte das jetzt nicht mehr nur für „ls“ sondern zum Beispiel auch für „ls -la“ machen. Das wenn ich „ls -la“ eingebe der „cat“ Befehl ausgeführt wird. Wenn ich so vorgehe wie im 1. Fall, müsste ich die Anführungszeichen mit angeben damit es funktioniert. Wie schaffe das ohne Anführungszeichen?
Ahh ich verstehe, wenn das erste Argument „-la“ lautet wird der „cat“ Befehl mit dem 2. Argument ausgeführt. Wenn das 1. Argument nicht „-la“ lautet wird der „cat“ Befehl mit diesem ersten Argument ausgeführt. So langsam ergibt das alles einen Sinn.