窓辺の小石 第183回 The Environment variable Man
マイナビニュース / 2024年9月13日 15時34分
WindowsやLinux/Unixなどには環境変数と呼ばれるものがある。環境変数は、シェルから起動されるプログラムに対して、何らかのテキスト情報を伝達するもの。現在の環境変数の元になったのは、Version 7 UNIXに搭載されたもの。すべてのプログラムからアクセス可能な変数とすることでさまざまな応用が可能になった。たとえば、アプリケーションのオプション設定値を環境変数で表現することで、毎回起動オプションを指定する必要がなくなった。あるいは、エディタを指定しておくことで、必要に応じて、ユーザーの好みのエディタプログラムを起動させることも可能になる。
もともとシェルには、変数があり、これを使うことで、シェルスクリプト間では値を渡すことができた。また、起動するコマンドの引数をシェル変数とすることで、パラメーターを引き渡すこともできた。この仕組みを汎用的に使えるようにシステム側の機能としたのが環境変数だ。プログラムはAPIを介して、環境変数から必要な情報を得るようにしたことで、汎用性が高まった。
UNIXの標準シェル(sh。Bourneシェル)では、「変数名=値」としてシェル変数を定義したあと、「export 変数名」というコマンドを使って、環境変数を定義する。後継となるbash(Bourne Againシェル)では、2つを併せて「export 変数名=値」とすることができる。
環境変数は、親となるプロセス側で設定を行い、親から起動されたプログラム(子プロセス)がこれを利用することができる。プロセスが起動されると、その実行環境に、親の環境変数がコピーされる。起動されたプロセスで自由に環境変数を書き換えてもいいが、プロセスが終了すると環境変数はどこにもコピーされることなく消えてしまう。環境変数による情報の伝達は、親から子への一方通行なのである。
これは、シェルのスクリプトについても適用される。通常、シェルからスクリプトを起動すると、シェル自身が子プロセスとして起動し、スクリプトを実行する。このため、スクリプトに環境変数を変更する記述を書いても実行が終われば消えてしまう。仕組みを聞けば、なるほどと理解するが、初めてシェルを使ったという状況では、簡単には想像できない。
1つには、多くのシェルには、初期設定を行うスクリプトが用意されていて、その中では、環境変数を自由に定義できる。これを見ると、スクリプトで環境変数を書き換えて環境を切り替えることができると思いがちだ。しかし、これらの初期設定スクリプトは、実行が終わっても起動されたシェルプロセスは終了せずに、プロンプトを出して、入力待ちになる。つまり、起動されたシェルがそのまま継続して動いているのである。
-
- 1
- 2
この記事に関連するニュース
-
Windows Subsystem for Linuxガイド 第39回 Bashのヒストリ機能 その1「利用編」
マイナビニュース / 2024年9月24日 12時24分
-
ユニコードで文字数を数える方法
ASCII.jp / 2024年9月22日 10時0分
-
Googleスプレッドシートを悪用、税務署偽るフィッシングメールに警戒を
マイナビニュース / 2024年9月2日 12時22分
-
パロアルトの次世代ファイアウォールに偽装したマルウェア確認
マイナビニュース / 2024年9月2日 8時12分
-
クロスプラットフォームのターミナルエディター「micro」v2.0.14
マイナビニュース / 2024年8月28日 16時18分
ランキング
-
1バトルもアツい新作『英雄伝説 界の軌跡』を試遊!「日本ファルコム」ブースは巨大「みっしぃ」やノベルティなどが魅力【TGS2024】
インサイド / 2024年9月26日 20時20分
-
2「どういうお笑い?」 ヨシモト∞ホールが誤表示を謝罪 “斜め上をいくエラー”に「声出たwww」「どうしてこうなった」
ねとらぼ / 2024年9月26日 17時44分
-
3『モンハンワイルズ』に「イャンクック」が登場決定!「クック先生」の愛称で親しまれる人気モンスターが久しぶりの復活
インサイド / 2024年9月26日 23時35分
-
4「変わってなかったらロボット」 元“ギャルのカリスマ”安西ひろこ、容姿巡る「たたき」にピシャリ “45歳の近影”が奇跡そのものだった「本当の美人」
ねとらぼ / 2024年9月25日 20時15分
-
5【徹底検証】本当に使えるChrome拡張機能はどれ? 第1回 「Google翻訳」vs「DeepL翻訳」精度を比べてみた
マイナビニュース / 2024年9月26日 9時0分
複数ページをまたぐ記事です
記事の最終ページでミッション達成してください