今回はコマンドがどのように呼び出されているかというお話です。
皆さんコマンドを実行するときはコマンド名だけを入力していると思います。とりあえず以下のようなスクリプトを作成して実行してみてください。 実行結果は以下のようになります。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 コメント:
コメントを投稿