我可以在 shell 脚本的第一行省略“shebang”的完整路径吗?

Kev*_*vin 4 linux bash

我经常#!/usr/bin/env bash在shell脚本的第一行看到。

/usr/bin/在 macOS 上省略部分似乎效果很好:

#!env bash

echo Yo
Run Code Online (Sandbox Code Playgroud)

我可以在所有其他类 Unix 平台上执行此操作吗?

Erk*_*i A 5

并非所有地方都支持使用没有完整路径的解释器。在许多情况下,内核进行 shebang 处理,并且内核通常不知道环境变量,包括 PATH。所以它需要一个完整的路径才能找到解释器。

这就是#!/usr/bin/env bash使用 -bash由 定位和执行的原因env,因此它允许bash位于 PATH 中的任何位置,而只需要/usr/bin/env位于已知位置。您不能仅使用#!bashor #!env bash,因为内核不知道在哪里可以找到它们。

使用普通解释器有时可能会起作用 - 这意味着 shebang 处理是由了解环境的东西完成的,很可能是由活动 shell 本身而不是内核完成的。

关于类似问题也有很好的答案: