Env
From Wikipedia, the free encyclopedia
例
通常の用法
新しいシェルに対して環境をクリアするには
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と書いても実行されることを保証するため、シンボリックリンクを張るなどして解決してあることが多い。