我经常在Shell脚本的第一行看到#!/usr/bin/env bash
。
在macOS上省略/usr/bin/
部分似乎很好:
#!env bash
echo Yo
我可以在所有其他类似Unix的平台上这样做吗?
答案 0 :(得分:3)
到处都不支持使用不带完整路径的解释器。在许多情况下,内核会进行Shebang处理,而内核通常不知道环境变量,包括PATH。因此,它需要完整的路径才能找到解释器。
这就是使用#!/usr/bin/env bash
的原因-bash
由env
定位并执行,因此它允许bash
放在PATH中的任何位置,而只需要{{1} }位于已知位置。您不能仅使用/usr/bin/env
或#!bash
,因为内核不知道在哪里可以找到它们。
使用普通解释器有时可能会起作用-这意味着shebang处理是通过了解环境的某种方式完成的,很可能是通过活动的shell本身而不是内核。
对于类似问题也有很好的答案: