Linuxゲリラ戦記

$ export my_old = "16歳"
Error:エラーエラー!エラー!!エラー!!!エラー!!!調子のんなバーカ!エラー!!!!

80.環境変数の話

ナックス「今回は前回やったことの解説です!」

デビー君「はーい」

ナックス「前回やったコマンドを以下に書いてみます」

$ export PATH="$PATH:~/mybin"

デビー君「なんだか、めちゃくちゃ難しそうに見える」

ナックス「落ち着くんだ、デビー君。まずはexportを無視してみよう」

デビー君「exportを無視する?」

$ PATH="$PATH:~/mybin"

ナックス「この形式、どこかで見覚えありませんか?」

デビー君「……?」

ナックス「ほらほら。あれですよ!あれあれ!」

デビー君「??」

ナックス「……へ」

デビー君「へ」

ナックス「ん」

デビー君「ん」

ナックス「た」

デビー君「た」

ナックス「い」

デビー君「い」

デビー君「変態だー!!」

ナックス「違います。いきなり訳の分からないことを叫ばないでください。それでは、もうちょっと分かりやすく書き換えてみます」

$ PATH="設定値"

デビー君「はっはーん。これは、あれだな?」

ナックス「そうです。あれです!」

デビー君「変態だな?」

ナックス「違います。これはPATHという変数に値を設定しているのです」

デビー君「え!?あ!マジだ!」

ナックス「変数ってなんだっけ?っていう人は30.シェルスクリプトでプログラミングする前の予習。echoコマンド。exprコマンド。\によるエスケープ処理。をみて思い出してね」

ナックス「つまり、78.Linuxのパスの話でも言ったように『パスが通ったディレクトリ』の情報は、PATHという名前の変数に入っており、今回私達はPATH変数の中身を書き換えて、自分が作ったディレクトリをPATH変数の中に追加したのです」

ナックス「$PATHには、PATH変数にもともと入っていた情報(/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games)が入っているので、つまり」

$ PATH="$PATH:~/mybin"

ナックス「は」

$ PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:~/mybin"

ナックス「ということですね」

デビー君「ほうほう」

ナックス「試してみて欲しいのですが、実はPATH変数に値を設定するときはexportをつけなくても、値が設定できます」

デビー君「あ、そうなの?」

ナックス「はい。exportをつけないで変数に値を設定した場合(この場合の変数をシェル変数という)は、現在実行中のシェル(CUI環境)だけで有効な変数ですが、exportをつけて変数に値を設定した場合は、その変数を環境変数といい、シェルから実行したコマンドにも引き継がれる変数です」

デビー君「ほう……。よく分からない」

ナックス「ごめん。これに関してはあんまりうまく説明できる自信がない……。とりあえず『Linuxの環境を設定する変数に値を設定するときは基本的にexportをつける』という理解で大丈夫です。また、補足に参考になるようなサイトを載せておくので、参考にしてね」

デビー君「はーい」

ナックス「ちなみに、Linuxの環境情報が入っている変数はPATH以外にも色々あります。printenvっていうコマンドで、現在有効な環境変数が全部見れるらしいからやってみてね」

$ printenv

ナックス「環境変数のそれぞれの項目をもっと知りたい場合は、printenvコマンドを実行した結果、表示される変数名でググれば、大体何を設定するための変数かが分かると思います」

ナックス「あと、前回の補足で言ったように、環境変数に値を設定しても、一旦CUI環境を終わらせると、変数の情報が元に戻ってしまいます。環境変数に一時的に値を設定するのではなく、永続的に値を設定したい場合は自分のホームディレクトリにある設定ファイル.bashrcもしくは.bash_profileの例えば一番下とかにexport PATH="$PATH:~/mybin"みたいに書くと良いですよ」

デビー君「はーい」

ナックス「補足に、一応LANG変数について書きましたので、余裕があったら読んでね」

ナックス「さて。今後の予定ですが、C言語の基本をやろうと思います」

デビー君「はい」

ナックス「が!その前に、コマンドをバックグラウンドで実行する方法の話(81.パスの通ったディレクトリ補足)!」

補足

参考になるサイト
シェル変数と環境変数の違いをコマンドラインで確認する - Qiita
Linuxコマンド【 printenv 】 環境変数を表示します - Linux入門 - Webkaru
環境変数って何なのさ? | Linux 修験道
LANG変数に関して

使うことがあるかもしれない環境変数のひとつにLANG変数があります。LANG変数には、Linuxで使用する言語が設定されています。おそらく、ほとんどの皆さんはLANG変数には『日本語』を意味する設定値が設定されています(実は、一言に『日本語』と言っても、3種類くらいの日本語があります)。普段使う場合にはそのままの設定値で問題がないのですが、完全なCUI環境(CtrlキーとAltキーを押しながらF1キーを押したりF2キーを押すと始まる、例のあのCUI環境)では、日本語が文字化けしてしまいます。そこで「なんかメッセージが表示されてるけど、日本語は文字化けしていて、全く読めない。英語で良いから読みたい」っていう場合があると思います。その場合、以下のようにして、LANGにCを設定してみてください。

$ export LANG=C

上記コマンドで、メッセージが英語になります。この方法は、LinuxのCUI環境で言語を英語にしたい場合によく使われる方法です。

「LANG変数に関して」の参考になるサイト
LANG=Cはメッセージを英語で出すのではない(と思う - よくきたはてダ
Linuxのローカライゼーション系LANG変数:langについて
[覚書]ざけんな。”LANG=C” “LANGUAGE=C”で日本語!!英語にならない!!の怒りの対策。”LC_ALL=C”?”LANG=POSIX”?、suでdpkg-reconfigure locales情けないぞ! | Deginzabi163's Blog
UNIXコマンドのあたまにLANG=Cでデフォルトロケールで実行できる - Bye Bye Moore
Linuxで日本語名ディレクトリを英語名に変換する方法
このエントリーをはてなブックマークに追加