env
env(エンブ)は Unix系オペレーティングシステム (OS) で使われるユーティリティである。環境変数のリストを出力したり、現在の環境を変えることなく異なる環境変数の下で他のコマンドを実行するのに使われる。envを使うことで、変数の追加や削除、変数の値の変更を行える。
また、上記のような本来の目的以外に、インタプリタを起動するための一種のトリックによく使われる。スクリプトでインタプリタの起動を仲介する目的に使われ、その用途では通常は、環境に手を加えることはしない。
例
[編集]通常の用法
[編集]新しいシェルに対して環境をクリアするには
env -i /bin/sh
X Window Systemアプリケーションxcalcを起動し、異なるディスプレイに表示させるには
env DISPLAY=foo.bar:1.0 xcalc
トリック的用法
[編集]UNIXのシバンでは通常は、インタプリタのフルパスを与える必要がある。しかしUnix系OSでは、標準のプログラムを/usr/binに、管理者が独自に追加したプログラムを/usr/local/binに置いて区別して管理する (FHS) といった理由などから、インタプリタのフルパスがシステムにより異なる。そのため、インタプリタのフルパスを直接に記述すると、そのシェルスクリプトに汎用性がなくなる(他のシステムでは動かない可能性がある)。そこで、(インタプリタ自体があらかじめ環境変数PATHで指定されているディレクトリに置いてあることを前提に)フルパスではなく単なるコマンド名を記述してenvに実行させれば、汎用性が保てる[1]。
以下に非常に単純な Python スクリプトを示す。
#!/usr/bin/env python print "Hello World."
この例のように、インタプリタの代わりにenvを指定することで、スクリプトの実行時にPATHからインタプリタが検索され実行される。これにより同じスクリプトが、より多くの環境で動く可能性が高くなる。一方で、PATHから検索されるために、例えばユーザのホームディレクトリの下にある同名のプログラムが実行されるなど、同名の異なるプログラムが意図せず実行される危険もある。
なお、 envは/usr/binに置いてあることも/binに置いてあることもあるが、/usr/bin/envと書いても/bin/envと書いても実行されることを保証するため、シンボリックリンクを張るなどして解決してあることが多い。
脚注
[編集]- ^ 後藤大地 (2018年6月20日). “/usr/bin/envを使って移植性の高いスクリプトを書く方法”. TECH+(テックプラス). 2023年9月26日閲覧。
外部リンク
[編集]- 公式GNU envマニュアル(英語)
- Manpage of ENV
- env(1) man page(SunOSリファレンスマニュアル)
- env(1) man page(HP-UXリファレンス)