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

标签 linux bash

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

在 macOS 上省略 /usr/bin/ 部分似乎工作正常:

#!env bash

echo Yo

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

最佳答案

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

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

使用简单的解释器有时可能会奏效——这意味着 shebang 处理是由感知环境的东西完成的,很可能是由事件 shell 本身而不是内核完成的。

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

关于linux - 我可以在 shell 脚本的第一行省略 "shebang"的完整路径吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515648/

相关文章:

linux - 如何将命令输出存储在一个变量中而不是一行?

java - WSL Bash 未在 PATH 中找到 java

linux - 在 openembedded 构建过程中检查总体进度

java - 在另一个目录中安装 Java 1.7 OpenJDK

linux - 在字符串 bash 中连接变量

bash - 将包含空格的数组元素传递给 Zenity 窗口

linux - 如何在不输入整个 PATH 的情况下从 Linux 终端运行可执行文件

linux - 如何一次取消保护跨越多个页面的内存区域?

c++ - 如何在通过 Wine(同一台计算机)运行的 linux 程序和 windows 程序之间共享内存?

c - 用于读取串口的 read 系统调用中的超时事件