今回はコマンドがどのように呼び出されているかというお話です。
皆さんコマンドを実行するときはコマンド名だけを入力していると思います。とりあえず以下のようなスクリプトを作成して実行してみてください。 実行結果は以下のようになります。2回目の
では、普段よく使う
実際にどのようなものか見てみましょう。変数は
さて、上の
皆さんコマンドを実行するときはコマンド名だけを入力していると思います。とりあえず以下のようなスクリプトを作成して実行してみてください。 実行結果は以下のようになります。2回目の
bash --version が ./gistfile1.sh: line 6: bash: No such file or directoryというエラーになっているのがわかります。 そもそも
bash というコマンドはどこにあるのでしょうか?ターミナルで確認してみましょう。(type は bash のビルトインコマンドです)
bash は /bin/bash にあるようです。では、普段よく使う
ls や cat も同じように探してみましょう。
これらは /bin/ls と /bin/cat にあるようです。(※環境によっては /usr/bin 以下に格納されていることもあります)/bin という場所にあるのになぜコマンド名だけで呼び出せるのか?それは PATH 変数のおかげです。PATH 変数というのはコマンドを探すためのもので、:(コロン)で区切られたリストです。実際にどのようなものか見てみましょう。変数は
echo や declare(bash builtin) などで確認することができます。
少し整形します。
フルパスではないコマンドが指定された場合、bash は PATH 変数のリストの最初から順番にコマンドを探していきます(上の場合だと /usr/local/bin)。この仕組みのおかげでいちいちフルパスでコマンドを指定しなくてもコマンドを実行することができるようになっています。逆に言えば PATH 変数に含まれていない場所にあるコマンドはコマンド名だけで呼び出すことができません。さて、上の
PATH 変数の内容ですが、あなたの環境で実行した結果は上のものと同じだったでしょうか?恐らく違う結果だったのではないかと思います。なぜ違うのかというと、環境変数の話も絡んできますので今回は「コマンド名だけで呼び出された外部コマンドは PATH 変数のリストの左から順番に検索される」とだけ覚えておいてください。
0 コメント:
コメントを投稿