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

时间:2019-02-04 11:59:57

标签: linux bash

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

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

#!env bash

echo Yo

我可以在所有其他类似Unix的平台上这样做吗?

1 个答案:

答案 0 :(得分:3)

到处都不支持使用不带完整路径的解释器。在许多情况下,内核会进行Shebang处理,而内核通常不知道环境变量,包括PATH。因此,它需要完整的路径才能找到解释器。

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

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

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