一尘不染

Shell脚本在没有shebang行的情况下工作正常吗?为什么?

linux

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

#!/bin/sh

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

我正在使用bashshell,/bin/sh实际上是指向bash

lrwxrwxrwx 1 root root /bin/sh -> bash

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

如果我错过了perl中的shebang行,请赋予执行权限并运行./myscript.pl,它不起作用。

这里到底发生了什么?如果使用./,实际上何时需要shebang行?


阅读 259

收藏
2020-06-07

共1个答案

一尘不染

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

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

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

2020-06-07