我在编写一个简单的shell脚本,发现我的shell脚本不需要shebang行
#!/bin/sh
如果我授予脚本执行权限,并使用执行./myscript.sh。运行正常。
./myscript.sh
我正在使用bashshell,/bin/sh实际上是指向bash。
bash
/bin/sh
lrwxrwxrwx 1 root root /bin/sh -> bash
我知道shebang行用于告诉shell在您的其余脚本中使用哪个解释器。
如果我错过了perl中的shebang行,请赋予执行权限并运行./myscript.pl,它不起作用。
./myscript.pl
这里到底发生了什么?如果使用./,实际上何时需要shebang行?
./
文件中需要shebang行 , 并且仅当它打算作为可执行文件运行时才行(与sh file.sh调用相反)。脚本实际上并不需要它,而是让系统知道如何查找解释器。
sh file.sh
编辑 :很抱歉误读了问题。如果shebang行丢失或无法识别,/bin/sh则使用。但是我更喜欢露骨的解释器。
注意,这种行为不是通用的,IIRC,只有某些exec*家庭功能可以做到这一点(更不用说不同的平台了),因此这是在此明确的另一个原因。
exec*