Die Bash kennt einige Befehlstrenner. Wenn du eine Zeile (oder ein mehrzeiliges Kommando ) eingibst, wird das erst geparst. (parsen meint in einzelne Teile zerlegen; lateinisch pars==Teil)
Ein Befehl beginnt mit dem Pfadnamen eines Befehls. (Das kann nur etwas, wie adb sein, oder ein tatsächlicher Pfad, wie /home/looser/adb ). Danach können Optionen, z.B. -h oder --help, oder Argumente kommen. --conf-file /etc/halligalli.conf wäre ein Beispiel für eine Option, die ein Argument benötigt.
So ein Befehl kann ganz schön lange sein.
Damit die Bash weiß, wann ein Befehl zu Ende ist, gibt es zwei Zeichen, die einen Befehl beenden. Das Semikolon ; und das Neuezeilezeichen \n (also die Befehle schlicht Zeile für Zeile eingegeben).
Diese "Befehlstrenner" sind unbedingt. Es gibt aber auch bedingte. Einen kennst du schon.
- | Die Pipe macht die Ausgabe des ersten Kommandos zur Eingabe des zweiten Kommandos, das folgen muss. Wir nennen das einen "Filter".
- && Eine logische Verknüpfung. Der zweite Befehl wird nur ausgeführt, wenn der erste Befehl erfolgreich ausgeführt werden konnte.
- || Das negative Pendant, auch eine logische Verknüpfung. Der zweite Befehl wird ausgeführt, wenn der erste fehlschlug.
# nur ein Befehlstrenner, ist zu wenig. Man kann wenn man ein Nichts tut, danach noch ein Nichts tun.
;
# ergibt einen Syntaxfehler
# Ein Doppelpunkt ist die gültige Anweisung für "Tue nichts". Die Nop NoOPeration Anweisung
:;:
# das ist gültig. Die Bash tut zweimal nichts.
# das hier führt einfach beide Befehle aus
ls ; echo ich habe gerade vorher ls gerufen
# ls wird ausgeführt, und danach der echo Befehl mit seinen Argumenten
# wir verwenden eine Option, die nicht existiert
ls --halligalli && echo "hat funktioniert" || echo "ging in die Hose"
# es gibt die Option -A
ls -A && echo "hat funktioniert" || echo "ging in die Hose"
# Was wird das wohl geben?
: && echo Ja || echo nein
Alles anzeigen
Wenn die Bash eine Zeile korrekt parsen konnte, ruft sie die Einzelteile auf. Ob die Optionen und Argumente des jeweiligen Befehls Sinn machen, oder gültig sind, interessiert sie nicht.
Aber der Befehl selbst merkt das dann.
Die allermeisten Befehle antworten darauf mit einer Kurzhilfe, um dem User schnell den Überblick zu geben, damit er schnell finden kann, was er wieder wo falsch getippselt hat.