gpt4 book ai didi

bash - 为什么我要在命令前使用 env?

转载 作者:行者123 更新时间:2023-11-29 09:09:37 27 4
gpt4 key购买 nike

我见过同事在(交互式)shell 命令前加上 env,例如 env KEY=value my_script 来调用 my_script

我的问题是:在这里使用 env 有什么意义?你为什么不直接写 KEY=value my_script

我理解 env 的作用,并且像 #!/usr/bin/env python 这样的用例非常有意义。但是,我不明白为什么要在交互式 shell 中为命令添加前缀 env

最佳答案

您可能没有充分的理由必须在交互式命令中使用env

在 Bourne 派生的 shell(sh、ksh、bash、zsh)中,这两个命令:

key=VALUE my_script
env key=VALUE my_script

本质上是相同的。

不同之处在于,在第一个命令中,key=Value 是 shell 语法的一部分,而不是所执行命令的一部分。 env 是一个实际的命令(它通常不内置在 shell 中)。因此,在某些情况下您需要使用 env,例如,如果您正在运行一个调用另一个命令的命令。例如,如果您使用带有 -exec 选项的 find:

find . -type f -exec some_command \;

然后 some_commandfind 调用,而不是由 shell 调用,并且不会识别前导的 key=VALUE。您可以使用 env 来解决这个问题。

不过,这是一种相当不寻常的情况,它不适用于运行简单的命令。

另一个可能的原因是 csh 和 tcsh shell(不是从 Bourne shell 派生的)不使用相同的语法。习惯于以交互方式使用 csh 或 tcsh 的人可能会出于习惯使用 env key=Value my_script

或者有人可能会觉得使用 env 命令更明确,因此更清晰。

在最坏的情况下,这是一个无害的怪癖。它确实调用了一个额外的进程并且效率可能略低,但在交互式命令中并不重要。

正如 chepner 的评论指出的那样,env 命令允许您使用不是有效的 shell 变量名称的名称设置环境变量(尽管这很少是一个好主意),而 -i 选项允许您在设置变量之前清除现有环境。

(关于 #!/usr/bin/env hack,请参阅 this questionmy answer 进行讨论。)

关于bash - 为什么我要在命令前使用 env?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com