[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Programme_starten: Starten von Programmen] }}} [[Inhaltsverzeichnis()]] Bei der Benutzung oder der Erstellung eines Skripts für die Shell[1] [:Bash:] benötigt man oft Hilfe zum Verständnis eines Schlüsselworts oder Befehls. Hierfür kann man gut das in die Bash eingebaute Hilfesystem nutzen. = Kurze Version = Die eigene Hilfestellung der Bash ist zugänglich über die Kommandos[2] `type` und `help`. 1. Wenn man Hilfe zum Kommando KOMMANDO sucht, gibt man zuerst ein: [[Vorlage(Befehl, "type KOMMANDO")]] 1. Wenn nun „Schlüsselwort“ oder „eingebaute Funktion“ (shell builtin) angezeigt wird, * dann gibt man ein: [[Vorlage(Befehl, "help KOMMANDO")]] * sonst: [[Vorlage(Befehl, "man KOMMANDO")]] Außerdem können noch diese Befehle helfen: [[Vorlage(Befehl, "KOMMANDO -h")]] [[Vorlage(Befehl, "KOMMANDO --help")]] [[Vorlage(Befehl, "info KOMMANDO")]] = Hilfestellung durch die Bash = Alle Kommandos, welche die Bash ausführen kann, gehören in eine (manchmal auch mehrere) von drei Kategorien: * Schlüsselworte * interne Kommandos * externe Kommandos Schlüsselworte sind beim Programmieren verwendete reservierte Worte wie beispielsweise `if`, `while`, `for`. Interne Kommandos sind in das Programm Bash eingebaut, können aber im Gegensatz zu Schlüsselworten neu definiert werden. Externe Kommandos sind Programme, die bei Bedarf erst im Dateisystem gesucht, geladen und in einem neuen Prozess ausgeführt werden. Schlüsselworte und interne Kommandos sind innerhalb der Bash beschrieben, während man für externe Kommandos z.B. deren [:Manpage:] lesen kann. Das interne Kommando `type` zeigt die Kategorie eines (oder auch mehrerer) Kommandos an: {{{#!vorlage Befehl type for local sed man }}} {{{ for Ist ein reserviertes Schlüsselwort der Shell. local ist eine von der Shell mitgelieferte Funktion. sed ist /bin/sed man gehasht ergibt (/usr/bin/man) }}} Im Beispiel zu sehen ist: * `for` ist ein Schlüsselwort. * `local` ist ein internes Kommando. * `sed` und `man` sind externe Kommandos. Die Bash hat sich für den schnellen Zugriff das externe `man` intern gemerkt. Manchmal gibt es Alternativen für ein Kommando, `type` verrät diese mit der Option `-a`: {{{#!vorlage Befehl type -a echo printf }}} {{{ echo ist eine von der Shell mitgelieferte Funktion. echo ist /bin/echo printf ist eine von der Shell mitgelieferte Funktion. printf ist /usr/bin/printf }}} Das Kommando `echo` (und ebenso `printf`) gibt es also sowohl als internes wie als externes Kommando. Wenn man ein Kommando einfach eingibt, wird die erste aufgelistete Variante ausgeführt. Wenn man wirklich das externe Kommando ausführen will, muss man den kompletten Pfad zur Datei angeben oder dem externen Kommando das interne Kommando `command` voranstellen. Internes und externes Kommando machen nicht zwangsläufig dasselbe! Schlüsselworte und interne Kommandos erklärt die Bash auf Anforderung mit dem internen Kommando `help`: {{{#!vorlage Befehl help echo }}} {{{ echo: echo [-neE] [Argument ...] Ausgabe der Argumente auf die Standardausgabe. Zeigt die Argumente auf der Standardausgabe gefolgt von einem Zeilenumbruch an. Optionen: -n Keinen Zeilenumbruch anfügen -e Interpretation der folgenden Escape-Sequenzen zulassen -E Keine Interpretation der Escape-Sequenzen. … }}} Die erste Zeile ist so zu lesen: Alles in eckigen Klammern `[ ]` ist optional. Dies gehört zu einer weit verbreiteten Konvention für Manpages und andere Dokumentation in der *nix-Welt. Mit den Auslassungspunkten „...“ wird hier ausgedrückt, dass das davor stehende Element wiederholt werden darf. Weitere Regeln dieser Konvention kann man der Manpage des externen Kommandos `man` entnehmen: {{{#!vorlage Befehl man man }}} {{{ … Fettdruck genau wie angegeben eingeben Kursivdruck durch passendes Argument ersetzen [-abc] Ein oder mehrere Argumente innerhalb der [ ] sind optional. -a|-b Durch | abgegrenzte Optionen können nicht zusammen benutzt werden. Argument ... Das Argument kann wiederholt werden. [Ausdruck] ... Der gesamte Ausdruck innerhalb [ ] kann wiederholt werden. }}} =Links= Die Erstellung dieses Artikel wurde motiviert durch einen Beitrag im Internet. Er ist aber eine freie Adaption und keine getreue Übersetzung: * https://unix.stackexchange.com/questions/202302/variable-definition-in-bash-using-the-local-keyword/202326 * [:Bash:] #tag: Shell, Einsteiger, Programmierung