加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 为什么我会在命令之前使用env?

发布时间:2020-12-15 22:02:52 所属栏目:安全 来源:网络整理
导读:我见过同事使用env前缀(交互式) shell命令,例如env KEY = value my_script来调用my_script. 我的问题是:在这里使用env有什么意义?你为什么不写KEY = value my_script? 我理解env的作用,#!/usr/bin/env python等用例非常有意义.但是,我不明白你为什么要在
我见过同事使用env前缀(交互式) shell命令,例如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_command由find调用,而不是由shell调用,并且不会识别前导键= VALUE.你可以使用env来解决这个问题.

但这是一个相当不寻常的情况,并不适用于运行简单的命令.

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

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

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

正如chepner的评论所指出的那样,env命令允许你设置名称不是有效shell变量名的环境变量(虽然这很少是个好主意),-i选项允许你在设置变量之前清除现有环境.

(至于#!/usr/bin/env hack,请参阅this question和my answer进行讨论.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读