Ash

From Fritz!Box
Jump to: navigation, search

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

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 < Datei

Die Befehl bezieht seine Standard-Eingabe aus der Datei.

  • Umleitung der Standard-Ausgabe stdout mit >
 Befehl > Datei

Die Ausgabe des Befehls wird in die Datei umgeleitet.

  • Anhängen der Standard-Ausgabe stdout mit >>
 Befehl >> Datei

Die Ausgabe des Befehls wird an die Datei angehängt (ihr vorheriger Inhalt wird erhalten).

  • Weiterleiten der Standard-Ausgabe stdout an die Standard-Eingabe stdin eines Befehls mit |
 Befehl1 | Befehl2

Die 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


Baustelle!
Laufende Recherche, enthält noch viele Lücken und Fehler!

Horizontale Befehlsketten

  • Mehrere Befehle in einer Zeile mit ;
 Befehl1 ; Befehl2

Die 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 && Befehl2

Befehl2 wird nur ausgeführt wenn Befehl1 ohne Fehler lief.

  • Logische ODER-Verknüpfung der Ergebnisse von Befehlen mit ||
 Befehl1 || Befehl2

Befehl2 wird auch dann ausgeführt wenn Befehl1 scheiterte.

Bedingte Ausführung

  • Bedingte Ausführung mit if
 if [ Bedingung ]
 then
    Befehl
 fi

Befehl wird ausgeführt wenn die Bedingung erfüllt ist.

 if [ Bedingung ]
 then
    Befehl1
 else
    Befehl2
 fi

Befehl1 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
 done

Der Befehl wird ausgeführt solange die Bedingung erfüllt ist .

  • Programmschleifen mit until
 until [ Bedingung ]
 do
    Befehl
 done

Der Befehl wird ausgeführt bis die Bedingung erfüllt ist.

  • Programmschleifen mit for
 for Variable in Liste
 do
    Befehl
 done

Weist 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

Siehe auch