\r\n\r\n

linuxのbashで環境変数を設定する方法

linuxには、いくつかの種類の環境変数があります。その表示方法、ローカルやリモートでのログインのための作成方法、再起動後も有効にする方法について説明します...

Linuxでは、環境変数にいくつかの種類があります。その表示方法、ローカルおよびリモートログイン用の作成方法、再起動後も有効にする方法について説明します。

環境変数のしくみ

ターミナルウィンドウとその内部シェルを起動するとき、シェルの設定が正しく行われているかどうかを確認するために、一連の変数が参照されます。また、これらの変数は、ターミナルウィンドウやシェルが参照する必要のあるあらゆる情報を利用できるようにします。要約すると、これらの変数は、コマンドプロンプトの外観に至るまで、ターミナルウィンドウで見られる環境を定義する設定を保存します。だから、当然、環境変数と呼ばれる。

環境変数の中には、システム全体にわたるもの、つまりグローバルなものがあります。その他は、セッション全体で、自分だけが見ることができるものです。その他は、セッションの環境変数を参照することはできません。3つ目の環境変数は、シェルで定義されます。ロケール設定、タイムゾーン、キーボード設定、シェルがコマンドを見つけようとするときに検索するディレクトリのセット、およびデフォルトのエディタはすべて、シェルの環境変数に格納されています。

お使いのシステムにどのような環境変数が存在するかを確認する方法を紹介し、独自の環境変数を作成する方法について説明します。また、子プロセスが利用できるようにする方法、再起動時に永続化させる方法についても紹介します。

環境と遺伝

シェルは起動時に、シェル環境を定義する環境変数を読み込む初期化段階を経ます。

子プロセスと呼ばれるシェルからプログラムやコマンドを起動すると、親プロセスの環境を引き継ぎますが、注意!これから説明するように、環境に追加されない変数を作成することで、プロセスに継承されないようにすることができます。

子プロセスがシェルの場合、そのシェルはそれ自身の新しい変数セットから初期化されます。そのため、現在のシェルでコマンドプロンプトを変更した後に子シェルを起動しても、子シェルは親シェルの変更後のコマンドプロンプトを引き継ぎません。

地球環境変数

慣習上、環境変数の名前は大文字で表記されます。以下は、グローバル環境変数の一部と、その値が表す内容についてです。

  • SHELL:ターミナルウィンドウを開いたときに起動するSHELLの名前です。ほとんどのLinuxディストリビューションでは、デフォルトから変更しない限り、これはbashになります。
  • 用語説明:ターミナルウィンドウは、実際にはハードウェア端末のエミュレーションです。
  • ユーザー:現在システムを使用しているユーザーのユーザー名。
  • PWD:現在の作業ディレクトリへのパス。
  • OLDPWD:現在の作業ディレクトリに移動する前にいたディレクトリです。
  • LSu colours: LSで使用されるカラーコードのリストで、異なるファイルタイプを強調するために使用されます。
  • メール:Linuxコンピュータにメールシステムがすでに設定されている場合(デフォルトでは設定されていない)、現在のユーザーメールボックスのパスが保持されます。
  • PATH: シェルがコマンドの実行可能ファイルを探すために検索するディレクトリのリストです。
  • 言語、ローカライゼーション、文字エンコーディングの設定。
  • HOME:現在のユーザーのホームディレクトリ。
  • 環境変数_:下線(ux)には、最後に入力されたコマンドが格納されます。

関連: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環境変数は、ターミナルウィンドウの幅に加えた変更を反映させるために更新されます。

  • BASHOPTS:bashの起動時に使用するコマンドラインオプション。
  • BASHu version: BASHのバージョン番号は、単語と数字で構成される文字列である。
  • BASHu VERSINFO: BASHバージョンのデジタルフォーム。
  • 列:ターミナルウィンドウの現在の幅。
  • DIRSTACK:pushdコマンドでディレクトリスタックに追加されたディレクトリ。
  • HISTFILESIZE:ヒストリーファイルに許される最大行数。
  • HISTSIZE:メモリ上に許容されるヒストリーラインの数。
  • ホスト名:コンピュータのホスト名。
  • IFS: コマンドラインの入力を区切るために使用される内部フィールドセパレーター。デフォルトでは、これはスペースです。
  • PS1:環境変数PS1には、メイン、デフォルト、コマンドプロンプトの定義が含まれています。コマンドプロンプトの定義には、エスケープシーケンスと呼ばれるトークンのセットを含めることができます。これらは、ホストとユーザー名、現在の作業ディレクトリと時間を示しています。
  • PS2:コマンドが複数行にまたがり、より多くの入力を必要とする場合に、セカンダリコマンドプロンプトが表示される。PS2環境変数は、このセカンダリコマンドの定義を保持し、デフォルトでは大なり記号 (>) である。
  • SHELLOPTS:シェルオプションは、setオプションで設定することができます。
  • UID:現在のユーザーのユーザー識別子。

関連:Linuxでのpushdとpopdの使い方

いくつかのシェル変数を確認してみましょう。

echo $BASH_VERSION echo $HOSTNAME echo $COLUMNS echo $HISTFILESIZE echo $UID

念のため、コマンドプロンプトの定義では、以下のトークンを使用することができます。

  • \HH:MM:SSの形式で現在時刻を表示します。
  • \⑷:現在の日付で、平日、月、日の順に表示されます。
  • \ ⑭改行文字。
  • \ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
  • \ⅷ:現在の作業ディレクトリの名前です。
  • \w: 現在の作業ディレクトリへのパス。
  • \Ъ:ロガーのユーザー名。
  • \ℊ:コンピュータのホスト名です。
  • \#♪ シェルの各コマンドには番号が振られている。これにより、コマンドプロンプトでコマンドの番号を確認することができます。これは、ヒストリーリストにおけるコマンドの番号付けとは異なります。
  • \プロンプトの最後の文字を、一般ユーザーにはドル記号($)、ルートユーザーにはハッシュ記号(#)に設定します。これは、ユーザーのUIDを確認することで行われます。0の場合、ユーザーはrootである。

PS1 環境変数の定義は、.bashrc ファイルに記載されています。

セッション環境変数の作成

自分で使うための環境変数を作るには、.bashrcファイルの一番下に追加します。SSH接続などのリモートセッションでも環境変数を利用したい場合は、.bashuのサマリーファイルに環境変数を追加する必要があります。

どちらのファイルも環境変数の定義形式は同じです。設定ファイルの.bashuに定義を追加するには、ホームディレクトリで次のように入力します。

gedit .bashrc

INHERITED↩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

環境制御

環境変数は、スクリプトやアプリケーションがどのように動作すべきかを知らせるために使用することができます。設定や少量のデータを保存するために使用することができます。例えば、スクリプトは、他のスクリプトが参照できるような値を、ファイルに書き込むことなく、環境に入力することができます。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ