MrD*_*iel 3 unix terminal macos
在查看了env 命令手册页后,我很想看到一个实用程序的示例,该示例将在下面提到的用法中使用?
概要
env [-i] [name=value ...] [utility [argument ...]]
描述
env 在修改命令行上指定的环境后执行实用程序。选项 name=value 指定一个环境变量 name,值为 value。选项 `-i' 会导致 env 完全忽略它继承的环境。
一个常见的用途是启动解释器,利用env将搜索 $PATH 以查找被告知要启动的命令的事实。由于shebang 行需要指定绝对路径,并且由于各种解释器(perl, bash, python)的位置可能变化很大,因此通常使用:
#!/usr/bin/env perl
Run Code Online (Sandbox Code Playgroud)
而不是试图猜测它是/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选项快速清除环境。在遗留的sysvinit initscripts 中,它只是通常由系统管理员直接启动的 shell 脚本,有必要确保管理员的环境不会传播到启动的守护进程。(例如,流氓$TZ或$HOME可能会让事情变得非常混乱——尤其是对于某些cron守护进程。)
在这种情况下,initscript 准备一个简短的环境并使用以下内容启动守护进程:
env -i "PATH=/bin:/usr/bin" "LANG=$system_locale" /usr/sbin/crond
Run Code Online (Sandbox Code Playgroud)