首页 文章

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

提问于
浏览
253

bash 脚本的 Headers 中,这两个语句之间的区别是什么?

  • #!/usr/bin/env bash

  • #!/usr/bin/bash

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

env - run a program in a modified environment

这是什么意思?

4 回答

  • 8

    通过 /usr/bin/env 运行命令的好处是可以查找当前 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,而不必重做可执行行) . 但在以安全性为重点的情况下,后者将是首选,因为它限制了代码注入的可能性 .

  • 37

    使用 #!/usr/bin/env NAME 使shell在$ PATH环境变量中搜索NAME的第一个匹配项 . 如果您不想搜索它,它会很有用 .

  • 226

    通过使用env命令,不是在 /usr/bin/bash/ 中显式定义解释器的路径,而是从首次找到解释器的任何地方搜索并启动解释器 . 这有两个upsides and downsides

  • 2

    我发现它很有用,因为当我不知道env时,在我开始编写脚本之前我就是这样做的:

    type nodejs > scriptname.js #or any other environment
    

    然后我将文件中的那一行修改为shebang .
    我这样做,因为我并不总是记得我的计算机上的nodejs在哪里 - / usr / bin /或/ bin /,所以对我来说 env 非常有用 . 也许这里有细节,但这是我的理由

相关问题