env 命令可以调用的实用程序的示例是什么?

env 命令可以调用的实用程序的示例是什么?

看了env 命令手册页我很好奇,想看一个可以按照下面提到的用法使用的实用程序的示例?

概要

env [-i] [名称=值...] [实用程序 [参数...]]

描述

env 在修改命令行中指定的环境后执行实用程序。选项 name=value 指定环境变量 name,其值为 value。选项 `-i' 使 env 完全忽略其继承的环境。

答案1

一种常见的用途是启动解释器,利用env将在 $PATH 中搜索要启动的命令这一事实。由于舍邦线需要指定绝对路径,因为各个解释器(perlbashpython)的位置可能不同很多,通常使用:

#!/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,但这种情况相当罕见,并且只会发生在非 L​​inux 系统上。)


另一个用途是使用选项快速清除环境-i。在旧版系统初始化启动脚本只是 shell 脚本,通常由系统管理员直接启动,因此有必要确保管理员的环境不会传播到已启动的守护进程。(例如,一个流氓$TZ$HOME可能会让事情变得非常混乱——尤其是对于某些计划任务守护进程。

在这种情况下,启动脚本会准备一个简短的环境并使用以下命令启动守护进程:

env -i "PATH=/bin:/usr/bin" "LANG=$system_locale" /usr/sbin/crond

答案2

它实际上是任何程序。它对所有使用定义为环境变量的任何值的人都非常有用。您可以将环境变量值传递给任何程序,而无需在 shell 中实际设置它(从而影响其他程序)。

env ls运行ls而不修改环境。env -i ls重置环境。在我的系统上,这会从其输出中删除颜色,因为它取消设置LSCOLORSCLICOLORenv LSCOLORS=GxfxcxhxdxegdggbgdAhAg ls将运行ls,传递指定的LSCOLORS字符串并可能更改ls输出的颜色。

相关内容