No.003シェル
env
エンブ・環境変数表示・一時設定実行
環境変数を一覧表示し、必要に応じて一時的に変更した環境でコマンドを起動します。スクリプト実行や挙動切り分けで非常に重要です。
答えよく使う形
$ env | grep "^HOME="
HOME=/home/user
$ env LANG=C date
Thu Apr 9 ...
$ env
練習用の部屋です。何を打っても本物は変わりません。本物の Linux で続ける →
覚える順番の中でLPIC-1・40 駅め / 106
どんなコマンド?
現在の環境変数を確認したい時、一時的にLANGやPATHを変えてコマンドの挙動を確認したい時、不要な環境変数を外して不具合を切り分けたい時に使います。
envは、シェルから子プロセスへ受け渡される環境変数を確認、加工、上書きするためのコマンドです。何も引数を付けなければ環境変数一覧を表示し、NAME=VALUEを並べてからコマンドを書くと、そのコマンドだけに一時的な環境を与えて実行できます。
実務では、PATH、LANG、LC_ALL、HOME、http_proxyのような環境変数が原因で挙動が変わる場面がよくあります。envを使うと、現在の環境を観察したり、汚れた環境を切り離して再現試験したりできます。
書き方とオプション
組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。
$ env
使用例と実行結果
行を押すとコピーできます。
HOME=/home/user
Thu Apr 9 ...
まず安全に試す
3分ミッション
手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。
0 / 2
つまずいたとき
env -iで実行したらコマンドが見つからない
原因PATHも消えているためです。
こうするPATH=/usr/bin:/binのように最小限のPATHを明示してから実行します。
終わったときの数(戻り値)
$ echo $?
- 0一覧表示に成功、または起動したコマンドが正常終了しました。
- 125env自身の処理に失敗しました。GNU coreutils版で使われます。
- 126コマンドは見つかったが実行できませんでした。
- 127コマンドが見つかりませんでした。
気をつけることと入れ方
環境変数はプロセス挙動に強く影響します。誤ったPATHやLANGを与えると、別バージョンの実行ファイルが動いたり、文字化けや照合不一致が起きたりします。
たいていの Linux に最初から入っています(coreutils)。
環境による違い
POSIXのenvは環境を変更して別コマンドを起動する基本機能を定義します。GNU coreutils版では--unset、--ignore-environment、--chdir、--split-stringなど拡張が追加されています。
確かめた環境Debian GNU/Linux / 13 / GNU coreutils 9.7 / Bash 5.2.372026-04-09 に確認
よくある質問
printenvとの違いは何ですか。
envは一覧表示だけでなく、一時的な環境変更とコマンド実行もできます。
資格試験では
- LinuC レベル1大事1.03.1 コマンドラインの操作
- LPIC-1大事105.1 シェル環境のカスタマイズと利用
- 共通基礎大事Linuxコマンド基礎
env を最後まで読みました。
Linux コマンド辞典に戻る27 / 144