2016-05-21 3 views
0

には影響を与えません。私は、次の2つのコマンドがあります。bashのハッシュコマンドは、私の.bashrcファイルでは、地球環境

hash ih kl klt 
hash 

.bashrcファイルをソースとした場合、予想通り、出力は次のとおりです。

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

その後、コマンドプロンプトに「hash」と入力すると、ハッシュテーブルが空であることがわかります。これは、.bashrcファイルがソースされている間だけ、ハッシュ命令の効果が存続するかのようです。私は.bashrcファイルに "echo $$"命令を入れて、ソーシングが完了した後に$$の値をチェックしました。それらは同じものでした。 .bashrcファイルのソースが終了した後に、hashコマンドの効果が持続しないのはなぜですか?

ありがとうございます!

+0

あなたの '.bashrc'にはほかに何がありますか? 'PATH'を変更していますか? – pneumatics

+0

はい、ただし、.bashrcファイルの一番上にあります。ハッシュ命令は、すべてのパスの編集が完了した後にのみ実行されます。ハッシュコマンドに続く関数定義はありますが、ハッシュコマンドが扱うコマンドとは何の関係もありません。 – rbaumann

答えて

0

私はこの問題を解決しました。 sysadminが/ etc/profileファイル内のリンクを、別のスクリプトに導入して、.bashrcファイルがシリーズのいくつかのうちの1つとしてソースされていることがわかりました。これは、デフォルトの環境でドットファイルが自動的に取得される方法とはまったく異なります。とにかく、「余分な」スクリプトの1つがPATHをリセットしていたため、コマンドハッシュテーブルが再初期化されました。私の会社の変更であっても、〜/ .bash_profileファイルがまだソースファイルの最後のファイルであることがわかったので、そこにハッシュ命令を入れました。その後、ログアウトしてからもう一度やり直すと、ハッシュ命令の結果は保持されました。

あなたの返信をありがとう、彼らはどこに見えるようにガイドに役立ちました。

0

~/.bashrc~/.profileまたは~/.bash_profileから取得する必要があります。ログインシェルとして起動されると、私が新しい端末を開いたときに起こるように、bashはソースを持たない~/.bashrcです。

documentation for Bash startup filesをご覧ください。

関連する問題