昨日の勉強会でLinuxの環境変数について勉強し、かなり理解が深まったので、
分かりやく書いて行こうと思います!(ところどころ誤りががありましたら申し訳ありません)
自分もよくPATHを通すだの環境変数だの学習しているとマジでよくわかん単語をよく見かけます。
はっきり言っても物凄く嫌いでした(T_T)
なので今回は環境変数を理解して環境変数を定義してみました。
目標
環境変数を設定する。
主に初学者に向けての記事です。
環境
・mac
・シェル(bash)
まずはPATHとは?
少々タイトルとは異なる内容で申し訳ないです。
「PATH」という環境変数になります。
この「PATH」という環境変数には、コマンド検索パスが保存されていて、コマンドを実行するプログラムを探しに行く場所が定義されているみたいです。
実行すべきコマンド(ファイル)を特定のディレクトリから検索して実行してくれる。
参考記事
https://www.atmarkit.co.jp/ait/articles/1605/09/news013.html
「PATHとういう環境変数の内容を表示する」
$ echo $PATH
###出力結果
.rbenv/bin:/usr/local/mysql/bin:/Users/hajime/.rbenv/shims:/Users/.pyenv/shims:/Users/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
わかりずらいですが、「PATH」という環境変数には、複数のディレクトリが設定されいてディレクトリは「:」で区切られています。
わかりやすく改行したものが下記になります。
/Users/.rbenv/shims
/Users/.rbenv/bin
/usr/local/mysql/bin
/Users/.rbenv/shims
/Users/.pyenv/shims
/Users/.pyenv/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
環境変数とは?
なんか、難しい感じがしますが超絶簡単に言うと
自分のPC(ローカル環境)で使える変数の事です。
つまり自分のパソコンに設定してある特殊な変数を環境変数と言います。
PATHを通すとは?
結論から言うと、環境変数「PATH」を設定してコマンド検索パスを追加する事です。
実際に環境変数を設定してみた
###環境変数の内容を表示するコマンド
$ printenv
###実行結果
*環境変数「PATH」
│
PATH=/Users/.rbenv/shims:/Users/.rbenv/bin:/usr/local/mysql/bin:/Users.rbenv/shims:/Users/.pyenv/shims:/Users/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
SHELL=/bin/bash
TERM=xterm-256color
│ └変数の中身
変数名
***この他にも多くありますが今回は省略させていただきます。
###環境変数を定義
$ export 「変数名」=「環境変数の中身」
***厳密には exportコマンドには他にもシェル変数を定義したり、一覧表示できるみたいなのですが私の知見不足のため割愛させていただきます。
$ export testPath="hellow Linux Path"
###環境変数がセットされているか確認
$ printenv testPath
###実行結果
hellow Linux Path
###環境変数の一覧から確認する
printenv
PATH=/Users/.rbenv/shims:/Users/.rbenv/bin:/usr/local/mysql/bin:/Users.rbenv/shims:/Users/.pyenv/shims:/Users/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
SHELL=/bin/bash
TERM=xterm-256color
testPath=hellow Linux Path***今回追加した環境変数
###先ほど作った環境変数を削除する
unset testPath
結果
環境変数が無事に設定できた!
余談
完全に話が違ってきますがふと私が疑問に思った事です。
「ls」や「cat」コマンドなども本来ならプログラムの場所を指定しないと実行できないコマンドなのになぜ、「ls」などだけで実行できるのか?本来なら「/bin/ls」のコマンドで実行しないとできないはずでは?
Linuxでは、コマンド検索パス(環境変数?)登録されているファイルは、パス名を省略してもいい決まりがあるそうです。
すいませんこちらは、全然理解できていないので、説明は割愛させていただきますが
今後はこの事もっと深掘りして何故コマンドが省略できるのかをに説明できるように精進します。