Sonderzeichen und Variablen werden länglichere Beschreibungen erfordern. Vorläufig “verbanne” ich sie ans Ende dieser Seite. Vielleicht werden daraus auch mal eigene Seiten.
Mal sehen, was im Laufe der Zeit aus dieser Seite wird …
Findet die Shell eine leere Zeile vor, tut sie (hoffentlich) nichts. Irgendwie nicht wirklich erstaunlich.
Im interaktiven Modus (Kommandozeilen-Eingabe) wird der Eingabe-Prompt erneut ausgegeben.
Ein ungeschütztes # (Nummernzeichen, Hash-Symbol, Lattenzaun, …) leitet einen Kommentar ein. Alle Zeichen bis zum Zeilenende werden nicht bewertet.
Das schließt ein, dass allen Zeichen ihre Sonderbedeutungen — so sie denn welche haben — genommen werden (siehe auch : (leeres Kommando)).
Ein ungeschützter Doppelpunkt (:) ist ein leeres Kommando — sozusagen eine noop == no operation.
Klingt im ersten Moment wie eine zweite Möglichkeit zu kommentieren. Ist aber gefährlicher!
Wozu ich noch was schreiben wollte ...
# start ssh-agent [ -r $HOME/.do_start_ssh-agent ] && . $HOME/.spec/start_ssh-agent
: ${HOST:=`uname -n`} IDENTITY=` while : ; do case "$1" in "") break ;; -i) shift echo "$1" esac shift done ` if [ -n "$SSH_AGENT_PID" ] ; then # there is a ssh-agent running if ssh-add -l | egrep "${IDENTITY:-(RSA1)|$HOME/.ssh/id_[rd]sa}" > /dev/null then : identity found, nothing left to do else ssh-add ${IDENTITY} fi fi for i in `IFS=:; echo $PATH` ; do [ x"$i" = x"$FOUND_PATH" ] && continue SSH="$i/ssh" [ -x "$SSH" ] && break SSH=no-ssh-found done $SSH "$@"
die Eingabe wird vom Terminal oder aus einer Datei eingelesen bis ein
Ist für die aktuelle Shell das Verbose-Flag (-v) gesetzt, wird das Kommando während des Einlesens auf die Standard-Fehlerausgabe (stderr) kopiert.
Argumente und Variablen (“was mit einem $ anfängt”; ob sich das noch mit $(command) der bash, ksh u. a. vereinbaren läßt?) werden bewertet/ersetzt.
Die Teile der Kommandozeile, die in Backquotes(`) eingeschlossen sind, werden bewertet, ausgeführt und durch den von ihnen ausgegebenen Text ersetzt. Überzählige Leerstellen, Tabulatoren und Zeilentrenner werden im weiteren Verlauf von der IFS-Bewertung bereinigt. Sollen sie erhalten bleiben, muss der Ausdruck in Gänsefüßchen (") gesetzt werden.
Falls eine Umlenkung vorhanden ist, werden die zugehörigen File-Deskriptoren (üblicherweise 0, 1 oder 2) erst geschlossen und dann mit dem neuen Ein-/Ausgabe-Kanal verbunden. Alle mit der Umlenkung in Zusammenhang stehenden Zeichen werden aus dem eingelesen Kommando entfernt.
Durch die möglicherweise stattgefundenen Text-Ersetzungen wird ggf. eine nochmalige Zerlegung der Eingabe in Worte notwendig. An dieser Stelle kommt die Variable IFS (Inter-Field Separator(s)) ins Spiel: alle in dieser Variablen aufgeführten Zeichen — sofern sie nicht entsprechend dagegen geschützt sind — werden durch Leerzeichen ersetzt
Metazeichen (wie *, ?, ~ und ggf. andere) werden expandiert. Expandiert ein Ausdruck zu einem oder mehreren Dateinamen, so ersetzten diese den Ausdruck; andernfalls bleibt der Ausdruck erhalten.
Ist für die aktuelle Shell das Execution-Flag (-x) gesetzt, wird das, was inzwischen aus der Eingabe geworden ist, auf die Standard-Fehlerausgabe (stderr) kopiert. Variablen-Zuweisungen bleiben unverändert, anderen Zeilen wird ein “+” vorangestellt. (Hmmm … da habe ich aber neulich auch ein Plus (“+”) vor einer Shell-Variablen-Zuweisung gesehen; Spezialität der bash?)
Im nächsten Schritt finden alle Variablen-Zuweisungen statt, gefolgt von der Suche des Kommandos im Suchpfad (Umgebungsvariable PATH).
Die Variablen-Zuweisungen werden auf der Kommandozeile von rechts nach links abgearbeitet. (Mindestens für die bash kann ich das so nicht bestätigen!)
Enthält das Kommando einen Schrägstrich (/), wird das Kommando wie angegeben übernommen. Andernfalls wird der Suchpfad (von links nach rechts) durchsucht. Der erste Treffer ersetzt das Kommando auf der Eingabezeile. (Was hier subtil unter den Tisch fällt, sind in die Shell eingebaute Kommandos — builtins, z. B. echo oder test — die auch im Suchpfad üblicherweise zu finden sind. Da muss es noch eine nicht beschriebene Vorgehensweise geben.)
Im letzten Schritt wird das Kommando ausgeführt.
Handelt es sich um ein eingebautes Kommando (builtin), bearbeitet die aktuelle Shell das Kommando.
Andernfalls wird das Kommando versucht in den Speicher zu laden.
Gelingt das mit Erfolg wird es mittels exec
(2)-Systemaufrufs
ausgefuehrt, andernfalls wird es als Shell-Skript angenommen und
an einen weiteren Shell-Prozess “verfüttert”.
Folgende Zeichen haben in der Shell eine Sonderbedeutung:
# : ' " \ . $ () {} [] ` ? * < > ; | & ! ~
Im folgenden soll — versucht werden — einen Abriß dieser Sonderbedeutungen zu geben.
leitet einen Kommentar ein (siehe # (Kommentar))
Anfang der Sonderzeichen Anfang der Seite
Anfang der Sonderzeichen Anfang der Seite
Variablen werden gesetzt, indem man einem Namen (z. B. “name
”)
einen Wert (z. B. “wert
”) zuweist:
name=wertEs gelten die Einschränkungen, dass
${name}
, wobei in der
überwiegenden Mehrheit der Fälle die geschweiften Klammer
weggelassen werden können.
In diversen Fällen empfiehlt es sich jedoch sich an die Variante mit den geschweiften Klammern zu erinnern.
Anfang der Variablen Anfang der Seite
Die auf diesen Seiten zum Ausdruck gebrachten Meinungen sind die meinigen, nicht notwendigerweise die der Universität Osnabrück. (Es sei denn, sie würden zufällig übereinstimmen oder wären entsprechend gekennzeichnet.)
Zum Thema "Links":
Bei "Links" handelt es sich stets um "lebende" (dynamische) Verweisungen. Gernot Skalla hat bei der erstmaligen Verknüpfung zwar den fremden Inhalt daraufhin überprüft, ob durch ihn eine mögliche zivilrechtliche oder strafrechtliche Verantwortlichkeit ausgelöst wird. Er überprüft aber die Inhalte, auf die er in seinem Angebot verweist, nicht ständig auf Veränderungen, die eine Verantwortlichkeit neu begründen könnten. Wenn er feststellt oder von anderen darauf hingewiesen wird, daß ein konkretes Angebot, zu dem er einen Link bereitgestellt hat, eine zivil- oder strafrechtliche Verantwortlichkeit auslöst, wird er den Verweis auf dieses Angebot aufheben.
(Quelle: Impressum/Disclaimer des Berliner Beauftragten für Datenschutz und Informationsfreiheit Stand: 09/2002)
Last change: Wed Jun 7 15:44:57 CEST 2017