2015年6月22日月曜日

Posted by mattintosh | File under : , , , , ,
今回はコマンドがどのように呼び出されているかというお話です。

皆さんコマンドを実行するときはコマンド名だけを入力していると思います。とりあえず以下のようなスクリプトを作成して実行してみてください。 実行結果は以下のようになります。2回目の bash --version./gistfile1.sh: line 6: bash: No such file or directory というエラーになっているのがわかります。 そもそも bash というコマンドはどこにあるのでしょうか?ターミナルで確認してみましょう。(type は bash のビルトインコマンドです) bash は /bin/bash にあるようです。

では、普段よく使う lscat も同じように探してみましょう。 これらは /bin/ls/bin/cat にあるようです。(※環境によっては /usr/bin 以下に格納されていることもあります)

/bin という場所にあるのになぜコマンド名だけで呼び出せるのか?それは PATH 変数のおかげです。PATH 変数というのはコマンドを探すためのもので、:(コロン)で区切られたリストです。

実際にどのようなものか見てみましょう。変数は echodeclare(bash builtin) などで確認することができます。 少し整形します。 フルパスではないコマンドが指定された場合、bash は PATH 変数のリストの最初から順番にコマンドを探していきます(上の場合だと /usr/local/bin)。この仕組みのおかげでいちいちフルパスでコマンドを指定しなくてもコマンドを実行することができるようになっています。逆に言えば PATH 変数に含まれていない場所にあるコマンドはコマンド名だけで呼び出すことができません。

さて、上の PATH 変数の内容ですが、あなたの環境で実行した結果は上のものと同じだったでしょうか?恐らく違う結果だったのではないかと思います。なぜ違うのかというと、環境変数の話も絡んできますので今回は「コマンド名だけで呼び出された外部コマンドは PATH 変数のリストの左から順番に検索される」とだけ覚えておいてください。

0 コメント:

コメントを投稿