rehashについて
とあるサイトを見ていたら、rehashというコマンドが使われていて、何なのか知らなかったので調べてみた。
rehash ハッシュテーブルを再構築する。csh・tcsh の内部コマンド
UNIXの部屋 コマンド検索:rehash (*BSD/Linux)
なんで、今までお世話にならなかったのだろうと考えたら、メインで使っているシェルがbashだからだと納得した。
cshで実際にやってみた
さて、せっかく知ったので、いくつか試してみた。
シェルの変更とPATH確認
まずは、シェルをcshに変更して、PATHの確認
$ csh $ env | grep PATH PATH=/usr/local/ruby/1.8.7/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/ユーザ名/bin
PATHに/home/ユーザ名/binが含まれていたので、そこで試してみる事にする。
~/binの作成
~/bin が無かったので、作成
$ cd ~/ $ mkdir bin
スクリプトの作成の実行権限の付与
実行すると文字列が出力されるスクリプトを作成
$ vim bin/test1
#!/bin/sh echo "hello"
実行権限の付与
$ chmod 755 bin/test1
絶対パスを指定して実行
絶対パスを指定して実行するとハッシュテーブルを使わないらしいので、まずは、スクリプトの動作確認をかねて動かしてみる
$ ~/bin/test1 hello
実行された
rehashする前と後の実行結果
$ test1 test1: コマンドが見つかりません.
$ rehash $ test1 hello
ハッシュテーブルを更新しないと実行できない事が確認できた。
名前を変えてみると
$ mv bin/test1 bin/test2 $ test1 test1: コマンドが見つかりません. $ test2 test2: コマンドが見つかりません. $ ~/bin/test2 hello $ rehash $ test1 test1: コマンドが見つかりません. $ test2 hello
rehashが必要ですね。
bashでやってみた
bashだとハッシュテーブルは使わずに、毎回PATHを見に行くとの事なので、そっちもやってみた。
bashに変更
$ bash
実行してみる
$ test2 hello
名前を変更して実行してみる
$ mv bin/test2 bin/test3 $ test2 -bash: /home/hirai/bin/test2: そのようなファイルやディレクトリはありません $ test3 hello