ENV(1)

名称
env - 在重建的环境中运行程序

概述
env [选项]... [-] [名称=值]... [命令 [参数列表]...]

描述

在环境中将每个指定名称的环境变量设为指定的值，并运行给定命令。

必选参数对长短选项同时适用。

-i, --ignore-environment
    不带环境变量启动

-0, --null
    使每行输出以 NUL 字符结束，不添加换行符

-u, --unset=名称
    从环境中移除指定环境变量

-C, --chdir=指定目录名称
    将工作目录修改为指定的目录名称

-S, --split-string=S
    处理并将 S 字符串分割为多个参数；用于向 shebang 行传递多个参数

--block-signal[=信号]
    阻挡向指定命令传递指定的信号

--default-signal[=信号]
    将对指定信号的处理方式重置为默认方式

--ignore-signal[=信号]
    将对指定的一种或多种信号的处理方式设置为什么都不做

--list-signal-handling
    向标准错误输出非默认的信号处理方式

-v, --debug
    为每个处理流程输出详细信息

--help
    显示此帮助信息并退出

--version
    显示版本信息并退出

单独的“-”隐含选项 -i。如果没有给定命令，则输出重建后的环境。

参数中的信号可以是类似 'PIPE' 这样的信号名称，也可以是如 '1' 这样的信号编码。所有已知信号均包括其中。如需指定多个信号，可以使用半角逗号隔开。

选项

  -S/--split-string 在脚本中的用法
-S 选项可以在脚本中指定多个参数。例如，运行一个名为 1.pl的脚本，其第一行如下所示：

    #!/usr/bin/env -S perl -w -T
    ...

将会运行 perl -w -T 1.pl .

如果不加 '-S' 参数，脚本可能运行失败并输出以下错误：

    /usr/bin/env: 'perl -w -T': 没有那个文件或目录

请阅读完整文档以了解更多细节。

  --default-signal[=信号] 的用法
该选项可以将一个信号的处理方式设置为其默认行为，这是传统的 shell trap 命令无法实现的。下面的粒子确保 seq 能被 SIGPIPE 信号所终止，无论该信号在被调用的命令的进程中是如何被处理的。

    sh -c 'env --default-signal=PIPE seq inf | head -n1'

注意
POSIX 的 exec(2p) 手册页有以下内容：
    "许多现有的应用程序都错误地假定它们启动时接收信号的行为均为默认值且为非阻塞模式。因此，最佳实践是除非有明确的理由，否则在跨 exec 执行时不要阻塞或忽略信号，尤其是不要在跨 exec 执行任意的（即并非与你的代码紧密合作的）程序时阻塞信号。"

作者
由 Richard Mlynarik、David MacKenzie 和 Assaf Gordon 编写。

报告错误
GNU coreutils 的在线帮助： <https://www.gnu.org/software/coreutils/>
请向 <https://translationproject.org/team/zh_CN.html> 报告翻译错误。

版权
Copyright © 2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
本软件是自由软件：您可以自由修改和重新发布它。在法律允许的范围内，不提供任何保证。

参见
sigaction(2), sigprocmask(2), signal(7)

完整文档请见： <https://www.gnu.org/software/coreutils/env>
或者在本地使用： info '(coreutils) env invocation'