env - 環境変数を一時的に修正してコマンドを実行する

スポンサーリンク

envコマンドは、別のコマンドを引数に取ります。その別のコマンドに対して、envコマンドで一時的に修正した環境変数を用いてコマンドを実行します。

envコマンドでコマンドを引数に取らない場合は環境変数を表示することができます。また、envコマンドは、組み込みコマンドを実行しない特徴もあります。

スポンサーリンク

環境変数とは

環境変数は、プログラムが実行するときに、その実行するプログラムに渡される文字列のリストのことです。環境変数はname-valueのペアで、name=valueの形式で表されます。

bashの場合、exportやdeclare -xのコマンドで環境変数を設定することができます。

また、コマンドの前に変数を代入するような構文を入れるとそのコマンドだけに対して、環境変数を設定することもできます。例えば、manコマンドのマニュアルを英語で確認する場合は以下のコマンドが利用できます。

 

環境変数とは別にシェル変数というものもあります。シェル変数は環境変数のように実行するプログラムに変数を渡しません。また、以下のようにコマンドなしで変数に代入するとシェル変数を設定することができます。

bashでシェル変数を確認するには組み込みコマンドのsetコマンドやdeclare -pですべてのシェル変数を確認することができます。

コマンド例

または

 

 

envコマンドの構文

envコマンドの基本的な構文

 

環境変数の表示

 

 

envコマンドの利用例

環境変数の表示
(実行するコマンドを省略)

envコマンドは、実行するコマンドを省略して実行すると現在の環境変数をすべて表示します。これはprintenvコマンドと同じになります。

コマンド例

実行結果

 

 

 

環境変数を一時的に変更してコマンドを実行

日本語環境でdateコマンドで現在時刻を表示するときに日本語で現在時刻が表示されます。この時、一時的に環境変数を変更し、LANG=Cとして英語環境で現在時刻を表示したいときにenvコマンドを利用できます。

コマンド例と実行結果

 

bashの機能として、コマンドの前に変数を代入した場合でも環境変数を一時的に変更することができます。
コマンド例と実行結果

 

また、envコマンド内で変更した環境変数を、envコマンド内で実行するコマンドで使用する場合は工夫が必要になります。例えば、以下のコマンドはうまく働きません。

例えば、set -xのコマンドでシェルがこのコマンドをどのように解釈しているかを確認することができます。

環境変数VARはenvコマンドが実行される前にシェルによって展開されてしまいます。
このシェルの展開を防ぐ方法は、中間コマンドとしてbashを用いて、コマンドを実行することです。

コマンド例と実行結果

 

 

 

環境変数を一時的にすべて削除
(-オプションまたは-iオプション)

-または-iオプションで、環境変数を一時的にすべて削除してから、envコマンドで設定される環境変数を代入します。コマンド例では、コマンドを引数に取らないため、envコマンドは環境変数を表示します。

コマンド例

または

実行結果

 

 

 

特定の環境変数を一時的に削除
(-uオプション)

-uオプションは、指定した環境変数を一時的に削除することができます。コマンド例では、grepコマンドで指定した環境変数が消えているかを確認しています。また、コマンド例では、コマンドを引数に取らないため、envコマンドは環境変数を表示します。

コマンド例と実行結果

 

 

 

コマンドを実行する前に作業ディレクトリを変更
(-Cオプション)

-Cオプションは、シェルの作業ディレクトリを変更せずに、実行するコマンドでの作業ディレクトリを変更してコマンドを実行することができます。

コマンド例と実行結果

 

 

 

組み込みコマンドは実行しない

envコマンドは組み込みコマンドを実行しません。例えば、bashの組み込みコマンドの例としてdeclareコマンドやexitコマンド等があります。これをenvコマンドで実行しようとすると実行に失敗するので注意が必要です。

コマンド例と実行結果

 

 

 

参考

GNU Coreutils: env invocation