Ash
| AVM Wiki >> Shell-Befehle >> ash | @ whmf - IRC-Chat - hu nl it English |
| Community | Modelle | Zubehör | Environment | Konfiguration | Shell-Befehle | Software | Freetz | Lexikon | Tipps+Tricks | Bilder |
| Startup-Scripts | AVM-Befehle | BusyBox-Befehle | Linux-Befehle | Shared Libraries | Kernel-Module | Listings | Todo |
Contents |
Befehl
| Befehl: | ash | Man | Code | Wiki | Freetz | IPPF | whmf | AVM | Web |
| Pfad: | /bin | ||||||||
| Typ: | Link auf busybox - Handbuch - Source: .06 .29 .49 .76 7170.80 .87 7270.86 .05 7390.91 .05 .20 | ||||||||
| Status: | Open Source (GPL) | ||||||||
| Pakete: | TODO | ||||||||
| Modelle: | 7170 4.80 (Listing) | ||||||||
| Remove: | TODO | ||||||||
| Funktion: | Almquist Shell - BusyBox Befehlsinterpreter | ||||||||
ash (Almquist Shell) ist eine nahezu POSIX-konforme Shell die nach ihrem ursprünglichen Autor, Kenneth Almquist benannt ist. Sie ist der standard Befehlsinterpreter in busybox und kann auch als sh aufrufen werden. ash hat eine lange Geschichte die man sich am besten in diesem Artikel mit Stammbaum ansieht. In der BusyBox-Dokumentation findet man nichts über ash jedoch in der ash Manpage. In Debian Linux und damit auch in Ubuntu gibt es eine abgewandelte Version unter dem Namen dash (Debian Almquist Shell).
Aufgerufen von
Aufruf
$ ash --help BusyBox v1.12.4 (2010-05-28 02:35:50 CEST) multi-call binary No help available.
ash in busybox hat zwar den help Befehl eingebaut, die Optionen findet man jedoch nur im Quelltext oder der ash Manpage:
ash unterstützt alle Shell-Optionen des set Befehls. Zusätzlich:
ash [Shell-Optionen] [-c <string>] [-l] [<script>] -c <string> # Führt string aus anstatt von stdin zu lesen -l # Führt ash aus als wäre es eine login Shell <script> # Führt das script aus anstatt von stdin zu lesen
Interne Befehle
Wie jede Shell besteht ash aus internen und externen Befehlen, für BusyBox-Befehle verwäscht sich das etwas, jedoch sind alle AVM-Befehle und Linux-Befehle klar externe Befehle für ash. Als rein interne Befehle für die es kein BusyBox-Applet gibt (also keinen Dateinamen) enthält ash:
. : [ [[ alias bg break cd chdir continue eval exec exit export fg hash help jobs let local read readonly return set shift source times trap type ulimit umask unalias unset wait
Die folgenden Befehle sind eigentlich auch interne Befehle, jedoch auch als BusyBox-Applets ausgeführt
echo false kill printf pwd test true
Interaktiver Modus
Wird eine Shell aufgerufen um darin per Eintippen Befehle zu starten wird diese im Interaktiven Modus betrieben, die Shell weiß sozusagen das ein Benutzer davor sitzt. Wird jedoch beim Booten eines der Startup-Scripts ausgeführt (dies geschieht mit der selben Shell) ist dies nicht der Fall. Durch diese Unterscheidung ändert sich das Verhalten der Shell. So ist es beim unbeaufsichtigten Ausführen eines Scripts unmöglich einen Benutzer zu fragen, ob eine Datei wirklich überschrieben werden soll etc.
Editierung
- ^C interrupt
- ^D F4 delete right char
- ^H DEL delete left char
- ^I filename completion
- ^J newline
- ^M newline
- ^N next history line
- ^P prev history line
- ^Q xon
- ^S xoff
- ^W delete left word
- F2 F8 begin of line
- F5 F9 end of line
Standard Ein- und Ausgabe
Jede Shell verfügt über 3 Standard Ein- und Ausgabe Kanäle über die die Abwicklung mit der Aussenwelt geschieht:
- stdin - Standard Eingabe - Hieraus liest die Shell ihre Befehle
- stdout - Standard Ausgabe - Hierhin macht die Shell alle Ausgaben
- stderr - Standard Fehlerausgabe - Hierhin gehen alle Fehlermeldungen
Im interaktiven Modus ist stdin an die Konsole angeschlossen z.B, in einer Telnet Sitzung. Die Konsole sammelt was man Eintippt und schickt nachdem man Enter drückt die Zeile an die Shell die sie dann interpretiert und ausführt. stdout und stderr werden beide in die Konsole geleitet und so sieht man sowohl Ausgaben als auch Fehlermeldungen.
Startet man manuell ein Script wird stdin von diesem Script bezogen, stdout und stderr werden weiterhin in die Konsole gelenkt und man sieht was geschieht. Für Daemon-Prozesse z.B. wünscht man ein anderes Verhalten, hier wird oft stdout verworfen während stderr in ein Logfile umgelenkt wird damit Fehler zur späteren Betrachtung aufgezeichnet werden.
Jeder Befehl der von einer Shell gestartet wird erbt diese 3 Standard Ein- und Ausgabe Kanäle, sie können jedoch beim Aufruf umgeleitet werden:
- Umleitung der Standard-Eingabe stdin mit <
Befehl < DateiDie Befehl bezieht seine Standard-Eingabe aus der Datei.
- Umleitung der Standard-Ausgabe stdout mit >
Befehl > DateiDie Ausgabe des Befehls wird in die Datei umgeleitet.
- Anhängen der Standard-Ausgabe stdout mit >>
Befehl >> DateiDie Ausgabe des Befehls wird an die Datei angehängt (ihr vorheriger Inhalt wird erhalten).
Befehl1 | Befehl2Die Ausgabe des Befehls1 wird als Standard-Eingabe an Befehl2 über eine Pipeline weitergeleitet ('Pipen').
Shell-Environment
Neben den Standard Ein- und Ausgabekanälen verwaltet eine Shell noch viele andere Informationen, die im RAM-Speicher liegen als Environment (Umgebung). Da auch der Urlader ein gleichnamiges Konstrukt enthält wird hier zwischen Urlader-Environment und Shell-Environment unterschieden. Das Shell-Environment enthält u.A.:
- Angaben über den aktuell eingeloggten Benutzer - LOGNAME und USER
- Das aktuelle Arbeitsverzeichnis - PWD - lesbar mit pwd, änderbar mit cd oder chdir
- Der Suchpfad für Befehle - PATH
- Das Ergebnis des zuletzt ausgeführten Befehls
- Definierte Aliase - mit alias und unalias verwaltet
- Shell-Environment-Variablen
- ...
WIP
| Laufende Recherche, enthält noch viele Lücken und Fehler! |
Horizontale Befehlsketten
- Mehrere Befehle in einer Zeile mit ;
Befehl1 ; Befehl2Die Befehle werden von links nach rechts ausgeführt als würden sie in mehreren Zeilen stehen.
- Logische UND-Verknüpfung der Ergebnisse von Befehlen mit &&
Befehl1 && Befehl2Befehl2 wird nur ausgeführt wenn Befehl1 ohne Fehler lief.
- Logische ODER-Verknüpfung der Ergebnisse von Befehlen mit ||
Befehl1 || Befehl2Befehl2 wird auch dann ausgeführt wenn Befehl1 scheiterte.
Bedingte Ausführung
- Bedingte Ausführung mit if
if [ Bedingung ] then Befehl fiBefehl wird ausgeführt wenn die Bedingung erfüllt ist.
if [ Bedingung ] then Befehl1 else Befehl2 fiBefehl1 wird ausgeführt wenn die Bedingung erfüllt ist, ansonsten Befehl2.
- Bedingte Ausführung mit case
- TODO
Programmschleifen
- Programmschleifen mit while
while [ Bedingung ] do Befehl doneDer Befehl wird ausgeführt solange die Bedingung erfüllt ist .
- Programmschleifen mit until
until [ Bedingung ] do Befehl doneDer Befehl wird ausgeführt bis die Bedingung erfüllt ist.
- Programmschleifen mit for
for Variable in Liste do Befehl doneWeist Variable nacheinander jedes Element von Liste zu, führt damit jeweils den Befehl aus und verlässt dann die Schleife.
TODO
- Logische Negierung des Status-Codes eines Befehls mit !.
- Programme im Hintergrund starten mit &.
- Subshell-Aufrufe mit (, ).
- Flusskontrolle mit case, ), esac..
Beispiele
TODO