Anfaengerfrage zur Assoziativitaet von Semikolon und Ampersand auf der Kommandozeile

11/02/2015 - 11:28 von Ulrich D i e z | Report spam
Hallo!

Zur Zeit arbeite ich zum Einlernen über ein PuTTY-Terminal an einem
Raspberry PI mit raspbian, an dem weder Bildschirm noch Tastatur
angeschlossen ist und versuche gerade, mich in die
Kommandozeilengepflogenheiten von Linux einzuarbeiten.
Im Moment interessiert mich, was es bei Eingaben auf der
Kommandozeile mit dem Semikolon (;) und dem Ampersand (&)
genau auf sich hat.

Ich habe folgendes gelesen:

Ein Strichpunkt (;) trennt zwei Befehle voneinander.
Die Befehle werden zeitlich nacheinander ausgeführt:
Der rechts vom Semikolon stehende Befehl wird erst ausgeführt,
wenn der links vom Semikolon stehende Befehl terminiert hat.

Ein Ampersand (&) trennt zwei Befehle voneinander.
Beide Befehle werden zeitgleich ausgeführt:
Der rechts vom Ampersand stehende Befehl wird ausgeführt,
ohne dass das Terminieren des links vom Semikolon stehenden
Befehls abgewartet wird.

Ein doppeltes Ampersand (&&) trennt zwei Befehle voneinander.
Die Befehle werden unter Umstànden zeitlich nacheinander ausgeführt.
Der rechts vom doppelten Ampesand stehende Befehl wird nur
dann ausgeführt, wenn der links vom Semikolon stehende
Befehl fehlerfrei (bzw mit exitcode 0 bzw errorcode 0) terminiert.


Ich habe aber nichts über die jeweilige Assoziativitàt von Strichpunkt,
Ampersand und doppeltem Ampersand gefunden.
Sind derartige Operatoren linksassoziativ oder rechtsassoziativ?

Was passiert zB bei der Eingabe

CommandA & CommandB; CommandC


Wird da rechtsassoziativ zeitgleich zu "CommandA" die Sequenz
"CommandB; CommandC" abgearbeitet, oder wird linksassoziativ
zuerst "CommandA" zeitgleich zu "CommandB"
ausgeführt und erst wenn beide terminiert haben wird "Command C"
ausgeführt?

Kann mir jemand ein gutes Buch / pdf-File / Tutorial empfehlen, in dem
auch solche auf die Kommandozeile bezogenen Dinge abgehandelt
werden?

Mit freundlichem Gruß

Ulrich
 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
11/02/2015 - 12:57 | Warnen spam
[Shellprogrammierung ist hier off-topic;
X-Post & F'up2 de.comp.os.unix.shell]

Ulrich D i e z wrote:

Zur Zeit arbeite ich zum Einlernen über ein PuTTY-Terminal an einem
Raspberry PI mit raspbian, an dem weder Bildschirm noch Tastatur
angeschlossen ist und versuche gerade, mich in die
Kommandozeilengepflogenheiten von Linux einzuarbeiten.



Das hat nichts mit Linux (dem Kernel) zu tun, sondern mit dem verwendeten
Befehlsspracheninterpreter (Shell). In Deinem Fall wahrscheinlich die GNU
bash (siehe “echo $SHELL” bzw. /etc/passwd).

Ein Strichpunkt (;) trennt zwei Befehle voneinander.
Die Befehle werden zeitlich nacheinander ausgeführt:
Der rechts vom Semikolon stehende Befehl wird erst ausgeführt,
wenn der links vom Semikolon stehende Befehl terminiert hat.



Korrekt.

Ein Ampersand (&) trennt zwei Befehle voneinander.
Beide Befehle werden zeitgleich ausgeführt:
Der rechts vom Ampersand stehende Befehl wird ausgeführt,
ohne dass das Terminieren des links vom Semikolon stehenden
Befehls abgewartet wird.



Korrekt.

Ein doppeltes Ampersand (&&) trennt zwei Befehle voneinander.
Die Befehle werden unter Umstànden zeitlich nacheinander ausgeführt.



Nicht „unter Umstànden“, sondern auf jeden Fall. Andernfalls wàre die
Funktionalitàt, welche das Shell-Äquivalent einer UND-Verknüpfung ist, nicht
eindeutig.

Der rechts vom doppelten Ampesand stehende Befehl wird nur
dann ausgeführt, wenn der links vom Semikolon stehende
Befehl fehlerfrei (bzw mit exitcode 0 bzw errorcode 0) terminiert.



s/Semikolon/\&\&/

Ich habe aber nichts über die jeweilige Assoziativitàt von Strichpunkt,
Ampersand und doppeltem Ampersand gefunden.



Die ergibt sich aus der Grammatik der Sprache der verwendeten Shell.

Sind derartige Operatoren linksassoziativ oder rechtsassoziativ?



Ja.

Was passiert zB bei der Eingabe

CommandA & CommandB; CommandC



Vermutlich (hàngt von der Shell ab) dasselbe wie bei

CommandA & (CommandB; CommandC)

nur ohne Subshell. Du kannst es nachlesen und ausprobieren; für Letzteres
eignen sich die Befehle date(1) und sleep(1).

Wird da rechtsassoziativ zeitgleich zu "CommandA" die Sequenz
"CommandB; CommandC" abgearbeitet, oder wird linksassoziativ
zuerst "CommandA" zeitgleich zu "CommandB"
ausgeführt und erst wenn beide terminiert haben wird "Command C"
ausgeführt?



Ja.

Kann mir jemand ein gutes Buch / pdf-File / Tutorial empfehlen, in dem
auch solche auf die Kommandozeile bezogenen Dinge abgehandelt
werden?



Ja.

Dein Absender ist kapott.

Im Betreff sollte nur das Thema stehen, damit der Thread schnell bewertet
und leicht gefunden werden kann; nicht „Anfàngerfrage zu …“. (Dass Du noch
Anfànger bist, merkt man schon an der Art der Fragestellung.)

<http://www.tty1.net/smart-questions_de.html>

PointedEars

Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.

Ähnliche fragen