env 環境変数を表示する、または環境を変えてコマンドを実行する
env [オプション] [名前=値]... [コマンド [引数...]]試してみる
env | sort | head -n 5現在の環境変数を、並べ替えて先頭5つ表示します。
env | grep '^HOME='特定の環境変数の値を、grep で探します。
env MODE=test ./mode.sh環境変数を設定して、コマンドを実行します。今のシェルには影響しません。
env -u HOME sh -c 'echo "HOME=[$HOME]"'-u で、HOME を取り除いた環境でコマンドを実行します。
env -i MODE=clean ./mode.sh-i で、環境をすべて空にしてから、指定した変数だけで実行します。
env -i /usr/bin/env空の環境では、env が何も表示しません。
主なオプション
-i | 環境を空にしてからコマンドを実行する |
|---|---|
-u 名前 | 指定した変数を取り除いてコマンドを実行する |
-0 | 各項目を改行ではなく NUL で区切って表示する |
名前=値 | 変数を設定してコマンドを実行する |
解説
基本
引数なしの env は、現在の環境変数を 名前=値 の形で1行ずつ表示します。数が多いので、env | grep 名前 や | sort で絞って見るのが普通です。
コマンドを実行する
コマンドを付けると、環境を調整したうえで、そのコマンドを実行します。変更は、実行するコマンドの間だけです。呼び出し元のシェルの環境は変わりません。
printenv との違い
特定の変数の値だけを見たいときは、printenv HOME のように、printenv が使えます。環境変数の一覧は printenv でも出せます。
シェル変数は出ない
env が表示するのは、export された環境変数だけです。export していないシェル変数は出ません。シェル変数も含めて見たいときは、set を使います。
スクリプトでの利用
スクリプトの1行目の #!/usr/bin/env bash は、PATH から bash を探して実行する書き方です。bash のある場所が環境によって違っても、動かせます。