Bash/Eingabeverarbeitung: Unterschied zwischen den Versionen
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
| 1 || Token || Kommando in Token aufteilen, <nowiki>Shell liest Befehlszeile bis zum ersten Kommandotrenner (& && || ; > <) und zerlegt sie damit in einzelne Token</nowiki> | | 1 || Token || Kommando in Token aufteilen, <nowiki>Shell liest Befehlszeile bis zum ersten Kommandotrenner (& && || ; > <) und zerlegt sie damit in einzelne Token</nowiki> | ||
|- | |- | ||
| 2 || Erkennung von Schlüsselwörtern | | 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 || Auflösung von Aliasen | | 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. | | 4 || Klammer-Expansion || Klammererweiterungen wie a{b,c} werden zu ab ac aufgelöst. | ||
Zeile 14: | Zeile 14: | ||
| 5 || Tilde-Expansion || Die Tilde wird durch den Inhalt von $HOME, ~user durch das Homeverzeichnis von user (z. B. /home/user) ersetzt. | | 5 || Tilde-Expansion || Die Tilde wird durch den Inhalt von $HOME, ~user durch das Homeverzeichnis von user (z. B. /home/user) ersetzt. | ||
|- | |- | ||
| 6 || Parameter- und Variablenexpansion | | 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 | | 7 || Kommandosubstitution || Befehlsersetzungen der Form $(Befehle) oder `Befehl` werden durch ihr Ergebnis ersetzt | ||
Zeile 20: | Zeile 20: | ||
| 8 || Arithmetische Substitution || Berechnungen werden durch ihr Ergebnis ersetzt | | 8 || Arithmetische Substitution || Berechnungen werden durch ihr Ergebnis ersetzt | ||
|- | |- | ||
| 9 || Wortaufteilung || | | 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 | | 10 || Pfadnamensexpansion || Metazeichen wie *,? oder […] werden durch ihr Ergebnis ersetzt |
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.
|
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 |