Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ hash(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

alias(1)

sh(1)

hash(1)                                                             hash(1)

NAME
     hash - Hash-Tabelle der Shell bearbeiten

SYNTAX
     hash [name ...]                                               Format 1

     hash -r                                                       Format 2

BESCHREIBUNG
     Das in die Bourne-Shell sh(1) eingebaute Kommando hash hat zwei Funk-
     tionen:

     -  Es schreibt den Inhalt der Hash-Tabelle auf die Standardausgabe
        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 [siehe sh(1)]. 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 übergeord-
     nete Shell mit ihrer Hash-Tabelle zurück. Die Hash-Tabelle der Sub-
     shell ist gelöscht.

     In der Korn-Shell ksh(1) ist hash eine Alias-Variable für alias -t -,
     wobei alias(1) ein eingebautes Korn-Shell-Kommando ist.

   Format 1: Hash-Tabelle ausgeben oder erweitern

     hash [name ...]

     name  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:

           -  den entsprechenden relativen Pfadnamen der Form ./name, wenn
              das aktuelle Verzeichnis der Variablen PATH zugewiesen ist
              und name enthält, oder

           -  den absoluten Pfadnamen.

           Das Kommando hash trägt diesen Pfadnamen in die Hash-Tabelle
           ein. Ist name in keinem Verzeichnis enthalten, das der Variablen
           PATH zugewiesen ist, so erhalten Sie eine Fehlermeldung.




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

hash(1)                                                             hash(1)

           Für name können Sie nicht angeben:

           -  Shell-Prozeduren, für die Sie kein Ausführrecht haben,

           -  Kommandos, deren name einen Schrägstrich / enthält. Sie kön-
              nen also keine absoluten oder relativen Pfadnamen angeben.

           -  eingebaute Shell-Kommandos, da sie Unterprogramme von sh bzw.
              ksh sind. Ihr Name ist also nicht der Name einer ausführbaren
              Datei.

           Die Shell trägt ebenfalls nur ausführbare Shell-Prozeduren und
           Kommandos ein, wenn Sie sie mit ihrem einfachen Dateinamen auf-
           rufen.

           name nicht angegeben:

           Das Kommando hash schreibt den Inhalt der Hash-Tabelle auf die
           Standardausgabe. Die Ausgabe sieht wie folgt aus:

           hits    cost    command
           1       1       /bin/mail
           1       2       /usr/bin/tar
           1       1       /bin/ls
           1       1       /bin/cat
           1       1       /bin/chmod

           Dabei bedeuten die Angaben in den einzelnen Spalten:

           hits     Wie oft die Shell dieses Kommando seit dem Eintrag in
                    die Tabelle bereits ausgeführt hat. Die Ziffer 0 kenn-
                    zeichnet Kommandos, die bisher nur eingetragen, aber
                    noch nicht ausgeführt wurden.

                    Ein Stern * direkt nach der Zahl kennzeichnet ausführ-
                    bare Dateien, die nicht in den Standardverzeichnissen
                    für PATH, also in /bin bzw. /usr/bin enthalten sind.

           cost     Beim wievielten Pfadnamen in der Variablen PATH die
                    Shell das angegebene Kommando gefunden hat.

           command  Absoluter Pfadname der ausführbaren Datei bzw. ein
                    Pfadname der Form ./name für eine Datei im aktuellen
                    Verzeichnis.










Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

hash(1)                                                             hash(1)

   Format 2: Hash-Tabelle löschen

     hash -r

     -r    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 Verzeichnis erstellt,
           dessen Pfadname der Variablen PATH zugewiesen ist. Ein anderes
           Verzeichnis, dessen Pfadname ebenfalls der Variablen PATH zuge-
           wiesen ist, enthält bereits eine Kommandodatei gleichen Namens,
           die in der aktuellen Hash-Tabelle eingetragen ist. Dann führt
           die Shell immer das ältere Kommando aus, auch wenn in der Varia-
           blen PATH das zugehörige Verzeichnis hinter dem zuerst genannten
           eingetragen ist.

           Wenn Sie die Hash-Tabelle mit hash -r löschen, wird beim näch-
           sten 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.

FEHLERMELDUNG
     name: not found

     Diese Fehlermeldung kann eine der folgenden Ursachen haben:

     -  name ist in keinem der Verzeichnisse enthalten, deren Pfad der
        Variablen PATH zugewiesen ist.

     -  name ist zwar in einem dieser Verzeichnisse enthalten, aber nicht
        ausführbar.

     -  name ist ein eingebautes Shell-Kommando oder eine Shell-Funktion.

INTERNATIONALE UMGEBUNG
     Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
     texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
     ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
     LANG nicht oder als leere Zeichenkette definiert, verhält sich das
     System so, als wäre es nicht internationalisiert.



Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

hash(1)                                                             hash(1)

BEISPIELE
     Beispiel 1

     Den Inhalt der Hash-Tabelle ausgeben:

     $ echo $PATH
     /bin:/usr/bin:.
     $ hash
     hits    cost    command
     1       1       /bin/mail
     1       2       /usr/bin/tar
     2       1       /bin/ls
     3       1       /bin/cat
     1*      3       ./stich
     1       1       /bin/uname

     Beispiel 2

     Ein Kommando in die Hash-Tabelle eintragen:

     $ hash lpr
     $ hash
     hits    cost    command
     .
     .
     0       1       /bin/lpr
     .
     .

     Das Kommando /bin/lpr wurde neu in die Hash-Tabelle eingetragen. Es
     wurde noch nicht ausgeführt, und die Shell hat es in dem Verzeichnis
     gefunden, dessen Pfadname in der Variablen PATH an erster Stelle
     steht.

     Beispiel 3

     Der folgende Bildschirm-Dialog soll zeigen, wann die Hash-Tabelle
     gelöscht wird:

     $ hash
     hits    cost    command
     1       1       /bin/mail
     1       2       /usr/bin/tar
     2       1       /bin/ls
     3       1       /bin/cat
     0       1       /bin/lpr
     1*      3       ./stich
     1       1       /bin/uname
     $ sh
     $ hash
     hits    cost    command



Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

hash(1)                                                             hash(1)

     $ who
     ...
     $ ls
     ...
     $ hash
     hits    cost    command
     1       1       /bin/who
     1       1       /bin/ls
     $ CTRL-D
     $ hash
     hits    cost    command
     1       1       /bin/mail
     1       2       /usr/bin/tar
     2       1       /bin/ls
     3       1       /bin/cat
     0       1       /bin/lpr
     1*      3       ./stich
     1       1       /bin/uname
     1       1       /bin/sh

     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.

UMGEBUNGSVARIABLEN
     PATH   Suchpfad der Shell

HINWEISE
     hash existiert sowohl als externes Kommando (/usr/bin/hash) als auch
     als eingebautes Shell-Kommando (Built-in) der Bourne-Shell sh(1). Für
     die Ausführung von /usr/bin/hash erzeugt die Shell einen neuen Prozeß.

     Bei der Verwendung von hash können sich Abweichungen im Verhalten
     ergeben, je nachdem, welches Kommando benutzt wird. Die möglichen
     Abweichungen sind nicht eigens beschrieben.

SIEHE AUCH
     alias(1), sh(1).
















Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026