This question already has answers here:
Bash script execution with and without shebang in Linux and BSD

(2个答案)


6年前关闭。




我在编写一个简单的shell脚本,发现我的shell脚本不需要shebang行
#!/bin/sh

如果我授予脚本执行权限,并使用./myscript.sh执行。运行正常。

我正在使用bash shell,而/bin/sh实际上指向bash
lrwxrwxrwx 1 root root /bin/sh -> bash

我知道shebang行用于告诉shell在您的其余脚本中使用哪个解释器。

如果我错过了perl中的shebang行,请赋予执行权限并运行./myscript.pl,它将无法正常工作。

这里到底发生了什么?如果我使用./,何时真正需要shebang行?

最佳答案

文件中需要shebang行,并且仅当它打算作为可执行文件运行时才需要(而不是sh file.sh调用。脚本实际上并不需要它,它是系统知道如何查找解释器的条件。

编辑:很抱歉误读了问题。如果shebang行丢失或无法识别,则使用/bin/sh。但是我更喜欢露骨的解释器。

请注意,这种行为不是通用的,IIRC,只有某些exec*系列功能可以做到这一点(更不用说不同的平台了),因此这是此处要明确的另一个原因。

关于linux - Shell脚本工作正常而没有shebang行?为什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12296308/

10-09 20:55