LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

.bash_file PATHを通すの意味とコマンドについて

Last updated at Posted at 2020-12-24

.bash_fileとは

ログインシェルがbashの状態でログインしたときに読み込まれる設定ファイル。
ログインというのは、例えば、ターミナル.appを起動した際。

.bash_fileに関する変数について

大きく分けて2つあります

①シェル変数

PATH=HOME/.local

②環境変数

export PATH

exportで指定される変数

PATHの書き方

~/.bash_profile
export PATH=$PATH:追加したいコマンド検索パス
他にも、
export PATH=追加したいコマンド検索パス:$PATH

こんな感じで記述する。

:$PATH、もしくは$PATH:が必要な理由とは?

例えば、

まずはULBの環境変数を作成する

~/.bash_profile
export ULB=/usr/local/bin

ターミナルで、

echo $ULB
/usr/local/bin #出力結果

環境変数ULBのpathを変更したいとした時、

~/.bash_profile
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という環境変数に新しくパスを追加するという方法で考える。

従って、

~/.bash_profile
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が実行される。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up