[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.2 env: 変更した環境でコマンドを実行する

env は、環境を変更して、コマンドを実行する。

書式:

 
env [option]… [name=value]… [command [args]…]
env

variable=value’ という形のオペランドは、環境変数 variable の値を value に設定する。value は空っぽでも構わない (‘variable=’)。 変数の値を空に設定 (set) するのは、変数を破棄 (unset) するのとは別のことである。 こうしたオペランドは、左から右へ評価されるので、二つのオペランドが同じ変数を対象にしている場合、前のものは無視される。

環境変数名は、空でもよいし、‘=’ と ASCII NUL 以外なら、どんな文字を含んでいても構わない。 とは言え、変数名は、アンダースコア、数字、ASCII 文字のみから構成し、 数字以外の文字で始めるようにした方が、賢明である。 それ以外の名前だと、シェルなどのアプリケーションがうまく動作しないからだ。

=’ という文字を含まない最初のオペランドが、起動するプログラムであり、 環境変数 PATH に従って、どこにあるかが検索される。 残っている引数があれば、すべてそのプログラムに引数として渡される。 起動するプログラムは、シェルの組み込みコマンドであってはならない (see section 特殊ビルトイン・ユーティリティ)。

PATH に対する変更は、command のありかを検索する前に有効になる。 そこで、PATH を短縮するときには、気をつけなければならない。 PATH を未定義にしたり、‘/bin’ のような重要なディレクトリを外したりすると、変更前と同じ動作にならないかもしれないからだ。

めったにないことだが、プログラムの名前に ‘=’ という文字が含まれている場合、 それを変数の指定と区別する唯一の方法は、command として仲介的なコマンドを使用し、 その args として問題のあるプログラム名を渡すことである。 たとえば、‘./prog=’ が現在の PATH 中に存在する実行ファイルだとしよう。

 
env prog= true 
  # 環境変数 prog を空に設定して 'true' を実行する。
env ./prog= true 
  # 環境変数 ./prog を空に設定して 'true' を実行する。
env -- prog= true 
  # 環境変数 prog を空に設定して 'true' を実行する。
env sh -c '\prog= true' 
  # 'true' を引数にして 'prog=' を実行する。
env sh -c 'exec "$@"' sh prog= true 
  # これも 'prog=' を実行する。

環境変数の設定の後にコマンド名が指定されていない場合は、生成された環境が表示される。 これは、commandprintenv を指定するのと同じことである。

以下に例をいくつか挙げる。env に渡される環境は、‘LOGNAME=rms’, ‘EDITOR=emacs’, ‘PATH=.:/gnubin:/hacks’ からなっているものとする。

このプログラムでは以下のオプションが使用できる。参照: 共通オプション. オプションはオペランドの前に置かなければならない。

-0
--null

各行の末尾に改行ではなく、ゼロバイト (ASCII NUL) を出力する。このオプションを使用すると、出力するデータの途中に改行が現れる場合でも、 他のプログラムがその出力を解析できるようになる。

-u name
--unset=name

変数 name が環境中にあれば、それを環境から削除する。

-
-i
--ignore-environment

継承した環境を無視し、空っぽの環境から始める。

終了ステータス:

 
0:   command が指定されなかったので、環境を出力した。
125: env そのものの実行に失敗した。
126: command は見つかったが、起動できなかった。
127: command が見つからなかった。
それ以外は、command の終了ステータス。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.