Envとはどんな拡張子? わかりやすく解説 Weblio辞書 (original) (raw)
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リファレンス)
表話編歴Unixコマンド | |
---|---|
ファイルとファイルシステム管理 | cat chmod chown chgrp cksum cmp cp dd du df(英語版) file fsck fuser(英語版) ln ls lsof mkdir mount mv pax pwd rm rmdir size split tee touch type(英語版) umask(英語版) |
プロセス管理 | at bg chroot cron fg kill killall nice pgrep pidof pkill ps pstree(英語版) reboot shutdown time top |
ユーザ管理/環境 | clear env exit finger history(英語版) id logname(英語版) mesg passwd su sudo uptime talk tput(英語版) uname w wall who whoami write |
テキスト処理 | awk banner basename comm(英語版) csplit(英語版) cut diff dirname ed ex(英語版) fmt fold(英語版) head iconv join(英語版) less more nkf nl paste(英語版) printf sed sort spell(英語版) strings tail tr uniq vi wc xargs yes |
シェルビルトイン | alias cd echo test(英語版) unset wait |
通信 | dig host(英語版) ifconfig inetd ip (iproute2) netcat netstat nslookup ping rdate(英語版) rlogin route ssh traceroute |
検索 | find grep locate(英語版) whatis(英語版) whereis(英語版) |
マニュアル | apropos(英語版) help(英語版) man |
その他 | bc dc cal date expr false lp(英語版) lpr od sl sleep stty true tty |
Category:UNIXのソフトウェア UNIXユーティリティの一覧 |