macOS / Linux のシステム環境変数にプログラムのパスを追加する方法

パス

パス(PATH)とは、コンピューターにあるファイルの住所のことである。コンピューター上にインストールされたソフトウェアを実行したいとき、そのソフトウェアのパス(住所)をコンピューターに教えて、実行させる必要がある。

コンピューターにパスを教える方法として、2 通りが考えられる。1 つ方法として、コンピューターを起動する際に、プログラムのパスを 1 回だけ教えて、コンピューターが動いている間にずっと覚えてもらう方法である。この場合、コンピューターにパスを覚えてもらうために、そのパスをシステム環境変数という変数に追加する必要がある。一方で、もう 1 つの方法として、そのプログラムを実行するときにパスを教える方法である。この場合は、コンピューターに覚えさせる必要はないので、環境変数を追加する必要はない。

例えば blastn コマンドを実行する際に、blastn へのパスがすでに環境変数に追加されているならば、次のように実行する。コンピューターが blastn を見たときに、記憶した情報にしたがって blastn の住所を行き、そこの blastn を実行する。

blastn -help

これに対して、blastn へのパスが環境変数に追加されていない場合は、コンピューターが blastn を見たときに、その元プログラムが見つからないために、次のようなエラーが生じる。

blastn -help
# -bash: blastn: command not found

そのため、環境変数へ追加されていない場合でも blastn を使用したい場合は、次のように blastn への住所を直打ちすればよい。

~/local/bin/blastn -help

パスの追加

Linux と macOS のシステム環境変数は PATH と定義されている。プログラムへのパスを PATH 変数に追加することで、コンピューターが起動時にそのパスを覚えられるようになる。PATH にパスを追加するとき、.profile、.bashrc、.zshrc などのシェル設定ファイルで行う。ファイルは様々あるが、ログインシェルが bash であれば .bashrc ファイルを、zsh であれば .zshrc ファイルを開いて、パスの追加を行う。

パスの追加は、基本的に、.bashrc または .zshrc を開いて、最後の行に次の 1 行を追加すればよい。なお、/path/to/bin は自作プログラムが含まれているディレクトリである。このように、パスを追加するとき、/path/to/bin/blastn のようなフルパスを追加するのではなく、そのプログラムが含まれているディレクトリ /path/to/binPATH に追加するのが一般的である。

export PATH=${PATH}:/path/to/bin

複数のパスを追加する場合は、コロンでつないで続けて 1 行で書いてもよく、複数行に書いても良い。

export PATH=${PATH}:/path/to/bin1:/path/to/bin2
export PATH=${PATH}:/path/to/bin3

PATH 変数の修正が完了してから、ファイルをを保存してから、コンピューターをログインし直すと設定が反映されるようになる。

パスの優先順序

PATH 変数に追加されたパスには優先順序がある。例えば、blastn/path/to/bin1/blastn/path/to/bin2/blastn の 2 箇所にいんすとされているとする。この 2 箇所を次の順序で PATH 変数に追加されてたとする。

export PATH=${PATH}:/path/to/bin1:/path/to/bin2

このとき、blastn コマンドを実行すると、/path/to/bin1/blastn の方の blastn が実行される。このように、PATH に追加されているパスのうち、先頭にあるものが優先される。そのため、自分で新しいバージョンのプログラムを追加したのに、実行してみると古いバージョンのプログラムが実行されるような現象があれば、システムに古いバージョンのプログラムがインストールされていることに起因する可能性が高い。

自分で追加したパス以外にどのようなパスが存在するのか、それらのパスがどのような順序で並んでいるのかを確認する場合、次のようにして PATH の内容を出力してみるとよい。

echo $PATH
# /home/user/local/bin:/opt/anaconda3/bin:/opt/anaconda3/condabin:/home/user/local/bin/local/bin

シェル設定ファイル

シェルの設定ファイルとして bash ならば、.bash_profile、.bash_login、.bashrc などがある。また、zsh ならば .zprofile、.zshrc、.zlogin などがある。これ以降 zsh を使用する前提で、シェル設定ファイルを説明する。

シェルを起動する方法に応じて、ログインシェルとインタラクティブシェルに分類できる。ログインシェルは、ログイン時に起動するシェルのことであり、ターミナルのウィンドウやタブを立ち上げる際に起動するシェルのことである。これに対して、インタラクティブシェルは、zsh コマンドにより対話モードを開始させたときのシェルのことである。

以下のシェル設定ファイルが読み込まれる例をみると、すべての場合において .zshrc が読み込まれている。そのため、パスの追加やシェルの設定などを行う場合は、基本的に .zshrc ファイルを編集すればよい。

ログインシェル

ログインシェルの場合は、次の順でシェル設定ファイルが読み込まれる。設定ファイルが存在しない場合は読み込まれない。

  1. ~/.zshenv
  2. ~/.zprofile
  3. ~/.zshrc
  4. ~/.zlogin

インタラクティブシェル

インタラクティブシェルの場合は、次の順でシェルファイルが読み込まれる。設定ファイルが存在しない場合は読み込まれない。

  1. ~/.zshenv
  2. ~/.zshrc

シェルスクリプト

シェルスクリプトとして使用する場合は、次の順でシェル設定ファイルが読み込まれる。これは、シェルスクリプトを .zsh ファイルに保存して、.zsh ファイルを実行するときのことを指す。

  1. ~/.zshenv
  2. ~/.zshrc