linux - shebang怎么读 - shebang的作用




“#!/ usr/bin/env bash”和“#!/ usr/bin/bash”有什么区别? (3)

不是像/usr/bin/bash/中那样通过使用env命令明确定义解释器的路径,而是从第一次找到解释器的位置开始搜索并启动解释器。 这既有利空也有弊端

bash脚本的标题中,这两个语句有什么区别?

  1. #!/usr/bin/env bash

  2. #!/usr/bin/bash

当我试图看到env手册页时,我得到了这个定义:

 env - run a program in a modified environment

这是什么意思?


使用#!/usr/bin/env NAME使shell搜索$ PATH环境变量中的NAME的第一个匹配项。 如果您不知道绝对路径或不想搜索它,它会很有用。


通过/usr/bin/env运行命令有利于查找当前环境中程序的默认版本。

这样,您不必在系统的特定位置查找它,因为这些路径可能位于不同系统上的不同位置。 只要它在你的道路上,它就会找到它。

缺点是,既然你没有调用一个明确的可执行文件,它就有可能发生错误,并且在多用户系统上存在安全问题(例如,如果有人设法让你的可执行文件在你的路径中被称为bash )。

#!/usr/bin/env bash #lends you some flexibility on different systems
#!/usr/bin/bash     #gives you explicit control on a given system of what executable is called

在某些情况下,第一个可能是首选(比如运行带有多个python版本的python脚本,而不必重新执行可执行行)。 但在以安全性为重点的情况下,后者将是首选,因为它限制了代码注入的可能性。





shebang