Bash/Eingabeverarbeitung: Unterschied zwischen den Versionen

Aus Foxwiki
K Dirkwagner verschob die Seite Bash:Eingabeverarbeitung nach Bash/Eingabeverarbeitung, ohne dabei eine Weiterleitung anzulegen: Textersetzung - „Bash:“ durch „Bash/“
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Eingabeverarbeitung ==
=== Verarbeitung der Kommandozeile  ===
=== Verarbeitung der Kommandozeile  ===
; Reihenfolge der Auswertung


Im Abschnitt zur Syntax der Bash tauchte mehrfach der Begriff der Expansion auf. Im Sinne der Bash umfasst Expansion eine Menge von Regeln, nach denen die Eingabe in der Kommandozeile zunächst bearbeitet wird.
{| class="wikitable col1center big options"
 
|-
Jede durch Metazeichen getrennte Zeichenkette bildet ein einzelnes Wort in der Eingabe und wird von der Bash nach bestimmten Regeln expandiert.
| 1 || Token || Kommando in Token aufteilen, <nowiki>Shell liest Befehlszeile bis zum ersten Kommandotrenner (& && || ; > <) und zerlegt sie damit in einzelne Token</nowiki>
 
|-
Nachdem das Kommando in Token geteilt wurde, werden diese Wörter oder Token expandiert bzw. aufgelöst. Bestimmte Zeichenmuster werden hierbei durch andere substituiert - sie "expandieren".
| 2 || Schlüsselwörter || Erkennung von Schlüsselwörtern. Hat die bash im ersten Token ein „öffnendes Schlüsselwort“ wie 'if', 'function' oder Ähnliches gefunden, liest Sie den nächsten Befehl ein. Wird ein anderes (nicht öffnendes Schlüsselwort gefunden, gibt sie eine Fehlermeldung aus. Andernfalls fährt sie mit Schritt drei fort.
 
|-
Um zu versehen, wie die Shell mit einer Kommandozeile umgeht, ist es wichtig diese Expansionen zu kennen. In den nächsten Kapiteln werden alle Expansionen in Folge ihres Auftretens besprochen.
| 3 || Aliase || Auflösung von Aliasen. Hier werden Aliase (evtl. auch rekursiv) aufgelöst und durch ihren Inhalt ersetzt.
 
|-
Welche Regeln wann und in welcher Reihenfolge zum Einsatz gelangen, hängt vom konkreten Kontext ab und wurde im Zusammenhang mit einfachen Kommandos (Expansion der Worte) und Variablenzuweisungen genannt.
| 4 || Klammer-Expansion  || Klammererweiterungen wie a{b,c} werden zu ab ac aufgelöst.
 
|-
Die Reihenfolge der Auswertung ist: # Kommando in Token aufteilen
| 5 || Tilde-Expansion  || Die Tilde wird durch den Inhalt von $HOME, ~user durch das Homeverzeichnis von user (z.&nbsp;B.&nbsp;/home/user) ersetzt.
# Erkennung von Schlüsselwörtern
|-
# Auflösung von Aliasen
| 6 || Parameter/Variablen || Parameter- und Variablenexpansion.Alle Parameter (Variablen) mit einem Dollarzeichen ($) am Anfang werden durch ihren Wert ersetzt.
# Klammer-Expansion
|-
# Tilde-Expansion
| 7 || Kommandosubstitution  || Befehlsersetzungen der Form $(Befehle) oder `Befehl` werden durch ihr Ergebnis ersetzt
# Parameter- und Variablenexpansion
|-
# Kommandosubstitution
| 8 || Arithmetische Substitution  || Berechnungen werden durch ihr Ergebnis ersetzt
# Arithmetische Substitution
|-
# Wortaufteilung
| 9 || Wortaufteilung ||Kommandozeile in Argumente zerlegen.  
# Pfadnamensexpansion
* Sie trennt die einzelnen Argumente durch eines der Zeichen, die in der Shell-Variablen $IFS (Internal Field Separator) stehen
# Befehlssuche
* normalerweise Leerzeichen, Tabs und Newline-Zeichen
# Befehl ausführen
|-
 
| 10 || Pfadnamensexpansion  || Metazeichen wie *,? oder […] werden durch ihr Ergebnis ersetzt
 
|-
 
| 11 || Befehlssuche || Alle Wörter werden nun als Befehl behandelt und zunächst als Funktion, dann als interner Befehl und zuletzt in allen in der $PATH-Variable enthaltenen Pfaden gesucht
===== Verarbeitung der Kommandozeile =====
|-
 
| 12 || Befehl ausführen || Nachdem die Ein-/Ausgabe-Umlenkung (und Ähnliches) eingerichtet wurde, führt die Shell die Befehlszeile aus. Sollte sich daraus eine neue Befehlszeile ergeben beginnt der Durchlauf evtl. erneut
[[Image:Bild1.png]]
|}
 
===== Verarbeitung der Kommandozeile  =====
 
# Die Shell liest die Befehlszeile bis zum ersten Kommandotrenner (& && || ; > <) und zerlegt sie damit in einzelne Token.  
# Hat die bash im ersten Token ein „öffnendes Schlüsselwort“ wie 'if', 'function' oder Ähnliches gefunden, liest Sie den nächsten Befehl ein. Wird ein anderes (nicht öffnendes Schlüsselwort gefunden, gibt sie eine Fehlermeldung aus. Andernfalls fährt sie mit Schritt drei fort.
# Hier werden Aliase (evtl. auch rekursiv) aufgelöst und durch ihren Inhalt ersetzt.
# Klammererweiterungen wie a{b,c} werden zu ab ac aufgelöst.
# Die Tilde wird durch den Inhalt von $HOME, ~user durch das Homeverzeichnis von user (z.B. /home/user) ersetzt.
# Alle Parameter (Variablen) mit einem Dollarzeichen ($) am Anfang werden durch ihren Wert ersetzt.
# Befehlsersetzungen der Form $(Befehle) oder `Befehl` werden durch ihr Ergebnis ersetzt.
# Berechnungen werden durch ihr Ergebnis ersetzt.
# Die Shell zerlegt die Kommandozeile in einzelne Argumente. Sie trennt die einzelnen Argumente durch eines der Zeichen, die in der Shell-Variablen $IFS (Internal Field Separator) stehen, normalerweise Leerzeichen, Tabs und Newline-Zeichen.
# Metazeichen wie *,? oder […] werden durch ihr Ergebnis ersetzt.
# Alle Wörter werden nun als Befehl behandelt und zunächst als Funktion, dann als interner Befehl und zuletzt in allen in der $PATH-Variable enthaltenen Pfaden gesucht  
# Nachdem die Ein-/Ausgabe-Umlenkung (und Ähnliches) eingerichtet wurde, führt die Shell die Befehlszeile aus. Sollte sich daraus eine neue Befehlszeile ergeben beginnt der Durchlauf evtl. erneut.


[[Kategorie:Bash]]
[[Kategorie:Bash]]

Aktuelle Version vom 9. März 2024, 11:17 Uhr

Verarbeitung der Kommandozeile

Reihenfolge der Auswertung
1 Token Kommando in Token aufteilen, Shell liest Befehlszeile bis zum ersten Kommandotrenner (& && || ; > <) und zerlegt sie damit in einzelne Token
2 Schlüsselwörter Erkennung von Schlüsselwörtern. Hat die bash im ersten Token ein „öffnendes Schlüsselwort“ wie 'if', 'function' oder Ähnliches gefunden, liest Sie den nächsten Befehl ein. Wird ein anderes (nicht öffnendes Schlüsselwort gefunden, gibt sie eine Fehlermeldung aus. Andernfalls fährt sie mit Schritt drei fort.
3 Aliase Auflösung von Aliasen. Hier werden Aliase (evtl. auch rekursiv) aufgelöst und durch ihren Inhalt ersetzt.
4 Klammer-Expansion Klammererweiterungen wie a{b,c} werden zu ab ac aufgelöst.
5 Tilde-Expansion Die Tilde wird durch den Inhalt von $HOME, ~user durch das Homeverzeichnis von user (z. B. /home/user) ersetzt.
6 Parameter/Variablen Parameter- und Variablenexpansion.Alle Parameter (Variablen) mit einem Dollarzeichen ($) am Anfang werden durch ihren Wert ersetzt.
7 Kommandosubstitution Befehlsersetzungen der Form $(Befehle) oder `Befehl` werden durch ihr Ergebnis ersetzt
8 Arithmetische Substitution Berechnungen werden durch ihr Ergebnis ersetzt
9 Wortaufteilung Kommandozeile in Argumente zerlegen.
  • Sie trennt die einzelnen Argumente durch eines der Zeichen, die in der Shell-Variablen $IFS (Internal Field Separator) stehen
  • normalerweise Leerzeichen, Tabs und Newline-Zeichen
10 Pfadnamensexpansion Metazeichen wie *,? oder […] werden durch ihr Ergebnis ersetzt
11 Befehlssuche Alle Wörter werden nun als Befehl behandelt und zunächst als Funktion, dann als interner Befehl und zuletzt in allen in der $PATH-Variable enthaltenen Pfaden gesucht
12 Befehl ausführen Nachdem die Ein-/Ausgabe-Umlenkung (und Ähnliches) eingerichtet wurde, führt die Shell die Befehlszeile aus. Sollte sich daraus eine neue Befehlszeile ergeben beginnt der Durchlauf evtl. erneut