#!python3
print("Hello")
我发现这段代码在我的终端中运行良好。但每个人都这样做#!/path/to/file
或#!/usr/bin/env command
。
有什么理由避免#!command
在 shebang 行中使用?
答案1
一般情况下,无路径 shebang 假定 shebang 中的命令位于当前目录中。更一般地说,非绝对 shebang 是相对于执行脚本的进程的当前目录来解释的。
命令不在当前目录中的无路径 shebang 仅当从某些 shell(至少是 Zsh,但不是 Bash)启动脚本时才起作用,并且它之所以起作用是因为 shell 提供了帮助。当脚本运行时,执行失败,但是当时的规则是如果 shell 认为它是一个脚本,则尝试运行该脚本; Zsh 在其路径中查找 shebang 命令,但这不是标准的。
具有无路径 shebang 命令的脚本将无法在任何其他上下文中运行。
编写PATH
基于 - 的 shebang 的惯用方法是使用/usr/bin/env
,正如您提到的:
#! /usr/bin/env python3
或者,对于某些版本env
,
#! /usr/bin/env -S python3 --
以避免以破折号开头的脚本路径出现问题。