Linux中的env命令用于显示和管理Shell会话中的环境变量。环境变量是动态值,会影响Shell中运行的进程或程序,例如可执行文件的路径、用户特定设置和系统行为。不带参数运行env命令时,它会列出所有当前环境变量及其值。此外,env还可以用于在修改后的环境中执行命令,通过临时设置或覆盖特定环境变量(仅在该命令运行期间有效)。这对于在不改变全局配置的情况下测试或在特定环境中运行程序非常有用。
在开始之前,值得一提的是,本教程中的所有命令和操作已在Debian 12和Ubuntu 24.04上进行了测试。
Linux env命令
根据定义,env命令允许你在修改后的环境中运行程序。以下是该命令的语法,如其手册页中所述:
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
手册页中关于env的说明如下:
在环境中将每个NAME设置为VALUE,并运行COMMAND。
以下问答式示例将帮助你更好地理解此命令的工作方式:
Q1. 如何使用env命令访问所有环境变量?
你可能已经知道,Bash环境由VARNAME=VALUE条目组成。要访问所有环境变量及其关联的值,请不带任何选项执行env命令:
env
以下是上述命令的输出:

Q2. 如何使用env临时更改环境?
env的核心功能是临时更改进程的环境。例如,我们创建了一个名为env的小型可执行文件,它在执行时显示USER环境变量的值。
以下是正常情况下的输出:

然后,我们使用env命令将USER环境变量的值从"himanshu"临时更改为"HTF"。以下是使用的命令:
env USER=HTF ./env
以下是产生的输出:

可以看到可执行文件返回了新值。
注意:正如工具的通用语法所提示的,你可以调整多个环境变量的值,并使进程使用这些新值。
Q3. 如何使进程忽略现有环境?
如果你需要,还可以使进程忽略现有的/继承的环境变量,而从一个空环境开始。这可以使用-i或--ignore-environment选项来实现。
例如:

Q4. 如何使env使用NUL字符代替换行符输出?
在上面讨论的第一个示例中,env产生的输出行以换行符分隔。但是,如果你需要,可以使env使用NUL字符作为分隔符。此功能可以通过--null命令行选项来使用。
env --null
以下是示例截图:

Q5. 如何根据env命令退出状态码了解错误?
env命令会产生以下退出码:0、125、126和127。以下是关联的错误说明:
0 如果未指定COMMAND且输出了环境 125 如果'env'自身失败 126 如果找到了COMMAND但无法调用 127 如果找不到COMMAND
如果你收到的错误代码不在上述范围内,那是在修改后的环境中执行的进程/命令返回的退出状态。
总结
如果你是一个完全的命令行新手,可能不会每天都用到这个工具。但这并不意味着它不值得了解——实际上,env在许多场景中都非常实用。本教程中分享的示例应该足以让你入门。如需更多信息,请查阅命令的手册页,或者更好的做法是执行以下命令:
info coreutils env invocation