看了env 命令手册页我很好奇,想看一个可以按照下面提到的用法使用的实用程序的示例?
概要
env [-i] [名称=值...] [实用程序 [参数...]]
描述
env 在修改命令行中指定的环境后执行实用程序。选项 name=value 指定环境变量 name,其值为 value。选项 `-i' 使 env 完全忽略其继承的环境。
答案1
一种常见的用途是启动解释器,利用env
将在 $PATH 中搜索要启动的命令这一事实。由于舍邦线需要指定绝对路径,因为各个解释器(perl
、bash
、python
)的位置可能不同很多,通常使用:
#!/usr/bin/env perl
而不是试图猜测它是否是,,,,,或者在/bin/perl
用户的系统上....../usr/bin/perl
/usr/local/bin/perl
/usr/local/pkg/perl
/fileserver/usr/bin/perl
/home/MrDaniel/usr/bin/perl
另一方面,env
几乎总是在 中/usr/bin/env
。 (除非不是 的情况;某些系统可能会使用/bin/env
,但这种情况相当罕见,并且只会发生在非 Linux 系统上。)
另一个用途是使用选项快速清除环境-i
。在旧版系统初始化启动脚本只是 shell 脚本,通常由系统管理员直接启动,因此有必要确保管理员的环境不会传播到已启动的守护进程。(例如,一个流氓$TZ
或$HOME
可能会让事情变得非常混乱——尤其是对于某些计划任务守护进程。
在这种情况下,启动脚本会准备一个简短的环境并使用以下命令启动守护进程:
env -i "PATH=/bin:/usr/bin" "LANG=$system_locale" /usr/sbin/crond
答案2
它实际上是任何程序。它对所有使用定义为环境变量的任何值的人都非常有用。您可以将环境变量值传递给任何程序,而无需在 shell 中实际设置它(从而影响其他程序)。
env ls
运行ls
而不修改环境。env -i ls
重置环境。在我的系统上,这会从其输出中删除颜色,因为它取消设置LSCOLORS
和CLICOLOR
。env LSCOLORS=GxfxcxhxdxegdggbgdAhAg ls
将运行ls
,传递指定的LSCOLORS
字符串并可能更改ls
输出的颜色。