env(エンブ)は Unix系オペレーティングシステム (OS) で使われるユーティリティである。環境変数のリストを出力したり、現在の環境を変えることなく異なる環境変数の下で他のコマンドを実行するのに使われる。envを使うことで、変数の追加や削除、変数の値の変更を行える。
また、上記のような本来の目的以外に、インタプリタを起動するための一種のトリックによく使われる。スクリプトでインタプリタの起動を仲介する目的に使われ、その用途では通常は、環境に手を加えることはしない。 新しいシェルに対して環境をクリアするにはenv -i /bin/sh UNIXのシバンでは通常は、インタプリタのフルパスを与える必要がある。しかしUnix系OSでは、標準のプログラムを/usr/binに、管理者が独自に追加したプログラムを/usr/local/binに置いて区別して管理する (FHS) といった理由などから、インタプリタのフルパスがシステムにより異なる。そのため、インタプリタのフルパスを直接に記述すると、そのシェルスクリプトに汎用性がなくなる(他のシステムでは動かない可能性がある)。そこで、(インタプリタ自体があらかじめ環境変数PATHで指定されているディレクトリに置いてあることを前提に)フルパスではなく単なるコマンド名を記述してenvに実行させれば、汎用性が保てる[1]。 以下に非常に単純な Python スクリプトを示す。#!/usr/bin/env pythonprint "Hello World." この例のように、インタプリタの代わりにenvを指定することで、スクリプトの実行時にPATHからインタプリタが検索され実行される。これにより同じスクリプトが、より多くの環境で動く可能性が高くなる。一方で、PATHから検索されるために、例えばユーザのホームディレクトリの下にある同名のプログラムが実行されるなど、同名の異なるプログラムが意図せず実行される危険もある。 なお、 envは/usr/binに置いてあることも/binに置いてあることもあるが、/usr/bin/envと書いても/bin/envと書いても実行されることを保証するため、シンボリックリンクを張るなどして解決してあることが多い。
例
通常の用法
トリック的用法
脚注^ 後藤大地 (2018年6月20日). “/usr/bin/envを使って移植性の高いスクリプトを書く方法
外部リンク
公式GNU envマニュアル(英語)
Manpage of ENV
表
話
編
歴
Unixコマンド
ファイルとファイルシステム管理
cat
chattr(英語版)
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
m4
more
nkf
nl
paste(英語版)
patch
printf(英語版)
read(英語版)
sed
sort
spell(英語版)
strings
tail
tr
troff
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
ソフトウェア開発
ar
ctags
lex
make
nm
strip(英語版)
yacc
その他
bc
dc
cal
date
expr
false
lp(英語版)
lpr
od
sl
sleep
stty
true
tty