\r\n\r\n
Linuxでは、環境変数にいくつかの種類があります。その表示方法、ローカルおよびリモートログイン用の作成方法、再起動後も有効にする方法について説明します。
ターミナルウィンドウとその内部シェルを起動するとき、シェルの設定が正しく行われているかどうかを確認するために、一連の変数が参照されます。また、これらの変数は、ターミナルウィンドウやシェルが参照する必要のあるあらゆる情報を利用できるようにします。要約すると、これらの変数は、コマンドプロンプトの外観に至るまで、ターミナルウィンドウで見られる環境を定義する設定を保存します。だから、当然、環境変数と呼ばれる。
環境変数の中には、システム全体にわたるもの、つまりグローバルなものがあります。その他は、セッション全体で、自分だけが見ることができるものです。その他は、セッションの環境変数を参照することはできません。3つ目の環境変数は、シェルで定義されます。ロケール設定、タイムゾーン、キーボード設定、シェルがコマンドを見つけようとするときに検索するディレクトリのセット、およびデフォルトのエディタはすべて、シェルの環境変数に格納されています。
お使いのシステムにどのような環境変数が存在するかを確認する方法を紹介し、独自の環境変数を作成する方法について説明します。また、子プロセスが利用できるようにする方法、再起動時に永続化させる方法についても紹介します。
シェルは起動時に、シェル環境を定義する環境変数を読み込む初期化段階を経ます。
子プロセスと呼ばれるシェルからプログラムやコマンドを起動すると、親プロセスの環境を引き継ぎますが、注意!これから説明するように、環境に追加されない変数を作成することで、プロセスに継承されないようにすることができます。
子プロセスがシェルの場合、そのシェルはそれ自身の新しい変数セットから初期化されます。そのため、現在のシェルでコマンドプロンプトを変更した後に子シェルを起動しても、子シェルは親シェルの変更後のコマンドプロンプトを引き継ぎません。
慣習上、環境変数の名前は大文字で表記されます。以下は、グローバル環境変数の一部と、その値が表す内容についてです。
関連:Linuxでのpushdとpopdの使い方
これらの設定のいくつかは、ターミナルウィンドウに値を書き込むechoを使用していることがわかります。環境変数に含まれる値を見るには、その名前の先頭にドル記号($)を付ける必要があります。
タブ補完を使えば、環境変数の名前を埋めてくれるのも嬉しいところ。名前を半角英数字で入力し、タブをクリックします。変数名はシェルが行う。そうならない場合は、同じ文字で始まる名前の他のコマンドと環境変数を区別するために、もう数文字入力する必要があります。
echo $SHELL echo $LANG echo $HOME echo $PWD独自のグローバル環境変数を作成するには、/etc/environment ファイルに追加してください。にあるこのファイルを編集するには、sudo を使用する必要があります。
sudo gedit /etc/environment環境変数を追加するには、環境変数の名前、等号(=)、環境変数に保持させたい値を入力します。等号(=)の前後にはスペースを入れないでください。環境変数の名前には、アルファベット、アンダースコア(♪)、数字が使用できます。ただし、名前の1文字目を数字にすることはできません。
値中にスペースがある場合は、値全体を逆カンマ(")で囲むようにする。
ファイルを保存し、ログアウトしてログインし直します。新しい変数の存在を確認するためにechoを使用し、設定した値を保存します。
echo $WEBSITEこれは誰もが利用できるグローバルな環境変数であるため、usermaryは次回ログイン時に
echo $WEBSITEすべての環境変数を一度に見るには、printenv と入力します。 出力が多いので、パイプラインでソートしてから less output: に変換するのが理に適っています。
printenv | sort | lessソートされた環境変数の一覧は縮小表示されます。
grepパイプラインにより、特定のトピックに関連する環境変数を出力することができます。
printenv | grep GNOME関連:Linuxでテキストファイルをグラフィカルに編集するgeditの使い方
これらは、bashで使用されるシェル環境変数のうち、その挙動や機能を示したり記録したりするものです。ターミナル使用時に一部の値が更新されます。例えば、COLUMNS環境変数は、ターミナルウィンドウの幅に加えた変更を反映させるために更新されます。
関連:Linuxでのpushdとpopdの使い方
いくつかのシェル変数を確認してみましょう。
echo $BASH_VERSION echo $HOSTNAME echo $COLUMNS echo $HISTFILESIZE echo $UID念のため、コマンドプロンプトの定義では、以下のトークンを使用することができます。
PS1 環境変数の定義は、.bashrc ファイルに記載されています。
自分で使うための環境変数を作るには、.bashrcファイルの一番下に追加します。SSH接続などのリモートセッションでも環境変数を利用したい場合は、.bashuのサマリーファイルに環境変数を追加する必要があります。
どちらのファイルも環境変数の定義形式は同じです。設定ファイルの.bashuに定義を追加するには、ホームディレクトリで次のように入力します。
gedit .bashrcINHERITED↩u VARという環境変数を追加しました。行頭の「export」という文字に注意してください。
編集が終わったら、ファイルを保存して閉じます。ログアウトして再ログインするか、ドットコマンド(.)を実行すると、以下のようにシェルが .bashu の要約ファイルを再読込するようになります。
. .bashrcでは、コマンドラインから環境変数を作ってみましょう。
LOCAL_VAR="This session only"echo を使用すると、両方の環境変数にアクセスできることがわかります:.
echo $LOCAL_VAR echo $INHERITED_VAR継承された環境変数"Ⓐ"の定義には、行頭に "export "という文字があることにお気づきでしょう。これは、環境変数が現在のシェルの子プロセスに継承されることを意味します。bashコマンドで別の変数を起動すれば、サブシェル内部から再び両方の変数を確認することができます。
bash echo $LOCAL_VAR echo $INHERITED_VARこのように、サブシェルでは継承された \ VAR にアクセスできますが、ローカルの \ VAR にはアクセスできません。空白行が出るだけです。
exportは子プロセスに継承される環境に環境変数部分を追加しますが、継承される \u VARはグローバル環境変数ではありません。例えば、ユーザーであるmaryは参照することができません。
echo $INHERITED_VAR子bashセッションを閉じるには、exitを使用します。
exit継承された環境はスクリプトにも影響します。以下は、3つの環境変数の値をターミナルウィンドウに書き込む簡単なスクリプトです。
#!/bin/bash echo "WEBSITE" $WEBSITE echo "LOCAL_VAR" $LOCAL_VAR echo "INHERITED_VAR" $INHERITED_VARこれをenvironment-test.shというファイルに保存し、次のコマンドで実行可能にします。
chmod +x envtest.shスクリプトを実行すると、3つの環境変数のうち2つにアクセスすることができます。
./envtest.shスクリプトは、サイトのグローバル環境変数と、継承されたエクスポート環境変数を見ることができます。変数が作成されたシェルでスクリプトが実行されていても、ローカル変数にアクセスすることはできません。
これをローカルの \u VAR に対して行い、必要であればスクリプトを再度実行します。
export LOCAL_VAR ./envtest.shこの環境変数は現在のシェルの環境に追加されているので、スクリプトが継承する環境にも表示されます。スクリプトはこの環境変数を参照することもできます。
グローバル環境変数はリモートのログインセッションからアクセス可能ですが、ローカルで定義した環境変数をリモートで利用したい場合は、.bashuのサマリーファイルに追加する必要があります。.bashrcと.bashuのサマリーファイルで、同じ環境変数を異なる値で設定することが可能です。これは、例えば、ローカルまたはリモートでシステムを使用するユーザーに対してその動作を変更するスクリプトを使用して行うことができます。
(混乱を招くかもしれませんが、.profile ファイルも存在します。また、環境変数の定義も保持することができます。ただし、.bashuのプロファイルファイルが存在する場合は、.profileは読み込まれません。したがって、最も安全でbashと互換性のある方法は、.bashuプロファイルファイルを使用することです)。
.bashの設定ファイルを編集するために、再びgedit:を使用します。
gedit .bash_profile前回と同じ環境変数と同じ値を追加します。
変更を保存して、geditを終了します。
別のコンピュータで、テスト用コンピュータにSSH接続を確立します。
ssh [email protected]接続したら、再びスクリプトを以下の場所で実行します。
./envtest.shリモートログインの初期化の一部として、.bashの要約ファイルが読み込まれ、我々とスクリプトの両方が継承された \u VAR 環境変数にアクセスすることができるようになりました。
環境変数の設定を解除するには、unsetコマンドを使用します。グローバル環境変数WEBSITEとエクスポートされた環境変数INHERITEDu VARをアンセットすると、コマンドラインやサブプロセス: で利用できなくなります。
unset WEBSITE unset INHERITED_VAR ./envtest.sh echo $WEBSITE注意すべきは、このセッションの間だけグローバル環境変数の利用可能性を変更することです。同時にログインした別の人は、そのグローバル環境変数のインスタンスにアクセスしたままです。彼のインスタンスはログイン時に初期化され、/etc/environment ファイルから読み込まれ、他の誰かの変数のコピーとは独立したものである。
例えば、ユーザーdaveがセッションでWEBSITE環境変数の設定を解除していても、ユーザーmaryはWEBSITE環境変数にアクセスしてその値を読み取ることができます。
echo $WEBSITE環境変数は、スクリプトやアプリケーションがどのように動作すべきかを知らせるために使用することができます。設定や少量のデータを保存するために使用することができます。例えば、スクリプトは、他のスクリプトが参照できるような値を、ファイルに書き込むことなく、環境に入力することができます。