为什么 shebang `env <executable>` 而不是 `executable`,即使不需要预先设置环境变量?

Why shebang `env <executable>` instead of `executable`, even when there is no need to pre-set environment variables?

为什么建议使用 /usr/bin/env python 而不是 /usr/bin/python。 这是从阅读这里的回复中得到启发的: What do I use on linux to make a python program executable

我认为两者会做完全相同的事情,但同样提到两者的答案有 2 票,而不是说使用 env 的答案有 88 票。人们似乎真的同意使用 env,但不解释原因。 env 是否可以帮助您找到任何名为 "python" 的可执行文件,而不仅仅是用户可以自定义的特定路径中的那个?

我真的很想知道使用 env 的各种优点和用例,man env 没有解释。 man env 只说你可以在 运行, NAME=VALUE 之前使用 env 设置环境变量,但我们在链接示例中没有这样做。

我觉得社区显然在推荐使用 env,但我自己的研究并没有暗示原因,所以如果你知道这样做的好处或好的风格,请回答。

使用 #!/usr/bin/env python 确保使用当前定义的 PATH 中的第一个 Python 解释器,尊重任何用户覆盖(对于 Python,包括 virtualenv s 之类的)。

这对于 MacOS 等环境尤为重要,其中 OS-vendor 软件包通常已过时(例如,/bin/bash 是 3.2 --从 2006 年发布系列——而如果用户有 MacPorts 或 Homebrew,/opt/local/bin/bash/usr/local/bin/bash 可能是现代的 4.x;因此,#!/usr/bin/env bash 将获得任何更新的好处bash 用户安装的解释器,无论是在系统范围内还是在他们的主目录下,只要该解释器的位置在运行时出现在他们的 PATH 中即可。