我经常在 shell 脚本的第一行看到 #!/usr/bin/env bash
。
在 macOS 上省略 /usr/bin/
部分似乎工作正常:
#!env bash
echo Yo
我可以在所有其他类 Unix 平台上这样做吗?
最佳答案
不支持使用没有完整路径的解释器。在许多情况下,内核进行 shebang 处理,内核通常不知道环境变量,包括 PATH。所以它需要一个完整的路径才能找到解释器。
这就是使用 #!/usr/bin/env bash
的原因 - bash
由 env
定位和执行,因此它允许 bash
位于 PATH 中的任何位置,而只需要 /usr/bin/env
位于已知位置。您不能只使用 #!bash
或 #!env bash
,因为内核不知道在哪里可以找到它们。
使用简单的解释器有时可能会奏效——这意味着 shebang 处理是由感知环境的东西完成的,很可能是由事件 shell 本身而不是内核完成的。
关于类似的问题也有很好的答案:
关于linux - 我可以在 shell 脚本的第一行省略 "shebang"的完整路径吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515648/