bash – 为什么我会在命令之前使用env?
我见过同事使用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进行讨论.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |