(remember or report utility locations)
Das in die POSIX-Shell sh eingebaute Kommando hash hat zwei Funktionen:
Es schreibt den Inhalt der Hash-Tabelle auf die Standard-Ausgabe oder trägt das angegebene Kommando in die Hash-Tabelle ein (Format 1).
Es löscht den Inhalt der Hash-Tabelle (Format 2).
Jede Shell hat ihre eigene Hash-Tabelle, in die sie alle Kommandos einträgt, die mit ihrem einfachen Dateinamen aufgerufen wurden. Wenn Sie ein Kommando mit dem einfachen Dateinamen aufrufen, sucht die Shell dieses Kommando zuerst in der Hash-Tabelle. Dadurch beschleunigt sich der Suchvorgang. Steht dieses Kommando noch nicht in der Hash-Tabelle der aktuellen Shell, wird es neu eingetragen.
Wenn Sie eine Subshell starten, ist die Hash-Tabelle der neuen Shell noch leer. Wenn Sie die Subshell beenden, meldet sich die übergeordnete Shell mit ihrer Hash-Tabelle zurück. Die Hash-Tabelle der Subshell ist gelöscht.
Syntax
Format 1: |
hash[ name...] |
Format 2: |
hash -r
|
Hash-Tabelle ausgeben oder erweitern
einfacher Dateiname eines Kommandos, einer ausführbaren Shell-Prozedur oder eines ausführbaren Programms. Die Shell sucht diese Datei entsprechend dem Inhalt der Variablen PATH. Wenn die Shell die Datei gefunden hat, übergibt sie an hash:
Das Kommando hash trägt diesen Pfadnamen in die Hash-Tabelle ein. Ist name in keinem Dateiverzeichnis enthalten, das der Variablen PATH zugewiesen ist, so erhalten Sie eine Fehlermeldung. Für name können Sie nicht angeben:
Die Shell trägt ebenfalls nur ausführbare Shell-Prozeduren und Kommandos ein, wenn Sie sie mit ihrem einfachen Dateinamen aufrufen. name nicht angegeben: ls=/usr/bin/ls cat=/usr/bin/cat chmod=/usr/bin/chmod Hash-Tabelle löschen
Den Inhalt der Hash-Tabelle löschen. Wenn Sie den Wert der Variablen PATH ändern, wird der Inhalt der Hash-Tabelle automatisch gelöscht. Wenn Sie die aktuelle Shell beenden, ist auch die Hash-Tabelle als Bestandteil dieser Shell gelöscht. Sie sollten den Inhalt der Hash-Tabelle in der aktuellen Shell löschen, wenn folgender Fall eingetreten ist: Sie haben eine ausführbare Datei in einem Dateiverzeichnis erstellt, dessen Pfadnameder Variablen PATH zugewiesen ist. Ein anderes Dateiverzeichnis, dessen Pfadname ebenfalls der Variablen PATH zugewiesen ist, enthält bereits eine Kommando-Datei gleichen Namens, die in der aktuellen Hash-Tabelle eingetragen ist. Dann führt die Shell immer das ältere Kommando aus, auch wenn in der Variablen PATH das zugehörige Dateiverzeichnis hinter dem zuerst genannten eingetragen ist. Wenn Sie die Hash-Tabelle mit hash -r löschen, wird beim nächsten Aufruf das Kommando gestartet, das die Shell zuerst findet. In diesem Fall entscheidet also die Reihenfolge der Einträge in der Variablen PATH. Der Pfadname des zuerst gefundenen Kommandos wird in die Hash-Tabelle eingetragen; d.h., dieses Kommando wird ab jetzt immer ausgeführt, wenn Sie es mit seinem einfachen Dateinamen aufrufen. |
Fehler
name
|
Variable
PATH Suchpfad der Shell |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos hash: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Den Inhalt der Hash-Tabelle ausgeben:
|
Beispiel 2
Ein Kommando in die Hash-Tabelle eintragen:
Das Kommando /usr/bin/cat wurde neu in die Hash-Tabelle eingetragen. |
Beispiel 3
Der folgende Bildschirm-Dialog soll zeigen, wann die Hash-Tabelle gelöscht wird:
In der neu gestarteten Subshell ist die Hash-Tabelle leer. Wenn die Subshell beendet wird, gilt wieder die Hash-Tabelle der übergeordneten Shell. Die Hash-Tabelle der Subshell ist gelöscht. |