Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我可以省略shell脚本第一行中“shebang”的完整路径吗?_Linux_Bash - Fatal编程技术网

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

Linux 我可以省略shell脚本第一行中“shebang”的完整路径吗?,linux,bash,Linux,Bash,我经常看到/第一行shell脚本中的usr/bin/env bash 在macos上省略/usr/bin/part似乎效果不错: !环境狂欢 回声悠悠 我可以在所有其他类似Unix的平台上执行此操作吗?在任何地方都不支持使用没有完整路径的解释器。在许多情况下,内核执行shebang处理,内核通常不知道环境变量,包括PATH。所以它需要一个完整的路径来找到解释器 这就是为什么/使用usr/bin/env bash—bash由env定位和执行,因此它允许bash位于路径中的任何位置,而只要求/usr

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

在macos上省略/usr/bin/part似乎效果不错:

!环境狂欢 回声悠悠
我可以在所有其他类似Unix的平台上执行此操作吗?

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

这就是为什么/使用usr/bin/env bash—bash由env定位和执行,因此它允许bash位于路径中的任何位置,而只要求/usr/bin/env位于已知位置。你不能只使用它!猛击!env bash,因为内核不知道在哪里可以找到它们

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

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


一个简单的!env bash在Ubuntu 18.04和bash 4.4.19中对我不起作用/usr/bin/env bash可以工作。我希望shebang需要一个完整的路径;如果对名称执行路径查找,那么首先就不需要使用env。