2016-05-21 2 views
0

In meinem .bashrc habe ich die folgenden zwei Befehle:bash Hash-Befehl in .bashrc hat keine Auswirkungen auf globale Umwelt

hash ih kl klt 
hash 

Wenn die Datei .bashrc bezogen ist, wird die Ausgabe wie erwartet:

hits command 
    0 /userdata/cfor/utils/worklib/kl 
    0 /userdata/cfor/utils/prodlib/ih 
    0 /opt/local/tools/bin/vi 

Aber dann, nachdem ich an der Eingabeaufforderung "Hash" eingeben, sagt es mir, dass die Hash-Tabelle leer ist. Es ist so, als ob die Wirkung der Hash-Anweisungen nur während der Beschaffung der .bashrc-Datei wirksam wird. Ich legte eine "echo $$" Anweisung in die .bashrc Datei und überprüfte dann den Wert von $$, nachdem das Sourcing abgeschlossen war, und sie waren identisch. Warum bleiben die Auswirkungen des Hash-Befehls nach der Bereitstellung der .bashrc-Datei bestehen?

Danke!

+0

Was ist noch in Ihrem '.bashrc'? Änderst du 'PATH'? – pneumatics

+0

Ja, aber nur am Anfang der .bashrc-Datei. Der Hash-Befehl kommt erst, nachdem alle Pfadänderungen abgeschlossen sind. Es gibt Funktionsdefinitionen, die dem Hash-Befehl folgen, aber sie haben nichts mit den Befehlen zu tun, die der Hash-Befehl adressiert. – rbaumann

Antwort

0

Ich löste das Problem. Ich stellte fest, dass mein Systemadministrator einen Link in der Datei/etc/profile in ein anderes Skript eingefügt hatte, das dazu führte, dass die .bashrc-Datei als eine von mehreren in einer Reihe bereitgestellt wurde. Das unterscheidet sich grundlegend von der Art und Weise, wie Punktdateien in der Standardumgebung automatisch bezogen werden. Auf jeden Fall hat eines der "extra" -Skripte den PATH zurückgesetzt, was dazu führt, dass die Befehlshash-Tabelle neu initialisiert wird. Ich stellte fest, dass die ~/.bash_profile-Datei auch bei den Änderungen meiner Firma immer noch die letzte zu entnehmende Datei war, also legte ich meine Hash-Anweisung dort hinein. Dann, nachdem ich mich aus- und wieder angemeldet hatte, blieben die Ergebnisse der Hash-Anweisung erhalten.

Vielen Dank für Ihre Antworten, sie halfen, wo Sie suchen.

0

Sie müssen ~/.bashrc von ~/.profile oder ~/.bash_profile beziehen. Wenn es als Login-Shell aufgerufen wird, wie es bei mir beim Öffnen eines neuen Terminals passiert, liefert bash keine ~/.bashrc.

Werfen Sie einen Blick auf die documentation for Bash startup files.