1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルのPATH変数の使用方法について

2022-02-07 20:54:31

前項で述べたように、Linuxでプログラム・スクリプトを実行するためには、絶対パスまたは相対パスでスクリプトの場所を指定する必要があります。しかし、なぜシステム・コマンドは、パスを指定せずに直接実行されるのだろうか?例えば,lsコマンドは"/bin/ls"と入力するのではなく,"ls"コマンドを直接実行することによって実行されます.ここで、環境変数PATHの出番です。

まずは、以下のように、環境変数PATHの値を問い合わせてみましょう。

[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/
bin:/root/bin

PATH変数の値は、": "で区切られたパスで、これらは、システムがコマンドを探すパスである。つまり、プログラム名を入力し、そのパスが書かれていなければ、システムはPATH変数で定義されたパスに移動して実行可能なプログラムがあるかどうかを調べ、見つかったら実行し、そうでなければ "コマンドが見つかりません"というエラーを報告するのです。

では、書いたスクリプトをPATH変数で定義されたパスにコピーして、パスを入力せずに実行することは可能なのだろうか。もちろん可能なので、冒頭のhello.shを例にとって試してみましょう。

[root@localhost ~]# cp /root/sh/hello.sh /bin/
# copy hello.shi to the /bin/ directory
[root@localhost ~]# hello.sh
c.biancheng.net
# hello.sh can now be executed directly


プログラムスクリプトをPATH変数で定義された任意のパス、例えば/bin/ディレクトリにコピーするだけで、絶対パスや相対パスを指定せずにスクリプトを直接実行できるようになります。

書いたスクリプトをすべて/bin/ディレクトリに置くと、システムコマンドと書いたプログラムが混同してしまうかもしれません(実は私はシステムディレクトリの構造を変えることには反対なのです)。プログラムスクリプトを/bin/ディレクトリにコピーする代わりに、PATH変数の値を変更することはできないのでしょうか?

もちろん可能です、変数を重ね合わせることで。

[root@localhost ~]# PATH="$PATH":/root/sh
# Add the /root/sh directory to the end of the PATH variable
[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/
bin:/root/bin:/root/sh
#Query the PATH value, the variable overlay is now in effect

もちろん、この方法で定義したPATH変数は一時的にしか効力を発揮せず、システムを再起動したりログオフしたりすると消えてしまいます。永続的に有効にしたい場合は、環境変数の設定ファイルに書き込む必要がありますが、これについては後のセクションで詳しく説明します。

シェルのPATH変数の使い方については、今回で終了です。シェルPATH変数に関する詳しい情報は、過去の記事を検索するか、以下の記事を引き続きご覧ください。