.bash_fileとは
ログインシェルがbashの状態でログインしたときに読み込まれる設定ファイル。
ログインというのは、例えば、ターミナル.appを起動した際。
.bash_fileに関する変数について
大きく分けて2つあります
①シェル変数
PATH=HOME/.local
②環境変数
export PATH
exportで指定される変数
PATHの書き方
export PATH=$PATH:追加したいコマンド検索パス
他にも、
export PATH=追加したいコマンド検索パス:$PATH
こんな感じで記述する。
:$PATH、もしくは$PATH:が必要な理由とは?
例えば、
まずはULBの環境変数を作成する
export ULB=/usr/local/bin
ターミナルで、
echo $ULB
/usr/local/bin #出力結果
環境変数ULBのpathを変更したいとした時、
export ULB=/u/l/b
ターミナルで、
echo $ULB
/u/l/b #出力結果
となる。これは元々設定していた/usr/local/binが上書きされ、/u/l/bになってしまっている。
この状況を環境変数PATHの場合で考えてみよう。
そうすると、PATHには既に、
/home/ユーザ名/.local/bin:
/home/ユーザ名/bin
という記述が存在している
なので、上記のような記述をしてしまうと、デフォルトで記載されているPATH自体を上書きしてしまう事になる。
それはしてはいけないので、
:の意味とは?
区切りを表す
:を使って、PATHという環境変数に新しくパスを追加するという方法で考える。
従って、
export ULB=/usr/local/bin
export ULB=/u/l/b:$ULB
echo $ULB
#出力結果
/u/l/b:/usr/local/bin
となって、2つとものPATHを使用できる
「$PATH:追加したいコマンド検索パス」、「追加したいコマンド検索パス:$PATH」どっち?
コマンド検索パスには優先度がある。
echo $PATHで出力された左から優先される。
従って、
追加するコマンド検索パスの優先度を高くしたい場合、以下のように記述する。
export PATH=追加したいコマンド検索パス:$PATH
元ある$PATHの優先度を高くしたい場合、以下のように記述する。
export PATH=$PATH:追加したいコマンド検索パス
環境変数
マシンの中のメモ帳みたいなもの。
コンソール(ターミナル)のどこからでも参照することができるメモ帳。
設定した環境変数を表示
echoコマンド
echo $PATH
echoコマンドは引数でもらった値を表示することができます。
変数の中身を表示するときには、変数の前に$が必要です。
printenvコマンド
printenv
環境変数にのみ対応しています。引数なしで実行することで環境変数の一覧を表示することができます。
また環境変数名を引数に渡すことで中身を見ることができます($はいりません)。
などなど
~/.bash_profileに記載した命令を反映させる方法
※~/.bash_profileに書いただけでは読み込まれません。
方法は2つ
①一度ログアウトしてログインしなおすか、以下のコマンドを実行します。
②
source ~/.bash_profile
のコマンドを実行
PATHとは
PATHとは環境変数のひとつ。
その中でもPATH(環境変数)は実行ファイル(アプリケーション)の格納場所をメモしたもの。
実行ファイル(アプリケーション)とは
コマンドの事
例えば、lsコマンドについて
/bin/ls
ls
上記は同じ効果を持つ。
lsコマンドの実行ファイルは/binディレクトリに格納されており、/bin/lsと入力するとアプリケーションが実行される。
/binをPATHに設定して(通して)いれば、上記のようにフルパス/bin/lsを指定せずともlsだけ入力すれば/bin/lsと同じ実行がされる。
このように、コマンド(lsなどの実行ファイル)入力時にシェル(bashやzsh等)が実際に実行ファイルを探しに行く際に参照するところをPATHと言う。
どんなPATHが設定されているか確認する方法
echo $PATHで確認できる
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin... #実行結果
実行ファイルの場所の確認方法
whichで、指定したコマンドの実行ファイルがどこに格納されているのか確認できる。
たとえばlsはどこのパスにあるかというと、
$which ls
/bin/ls #実行結果
/bin/以下にあることがわかる。
そして/bin/はPATHに登録してあるので、bin/lsはlsで動く。
目的とする実行ファイルが複数の違う場所にある場合
先に見つかった方を実行する。
PATHには優先度があり、echo $PATHで出力された左が優先される。
そのため、/usr/local/bin/lsと/usr/bin/lsのような同じ名前の実行ファイルが
存在する場合、/usr/local/bin/lsが実行される。