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

用户966588:

我在编写一个简单的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行?

Michael Krelin-黑客:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么这个指向函数的指针在没有警告或错误的情况下工作?

绑定可以在没有INotifyPropertyChanged的情况下工作,为什么?

为什么SKSpriteNode子类在没有encode(with :)的情况下工作

PySpark是否可以在没有Spark的情况下工作?

为什么check_output可以在不设置'shell = True'的情况下工作

$ watch仅在没有watchExpression的情况下工作

DataContract在没有DataContractAttribute的情况下工作(直到混淆)

为什么方法wait()在没有notify()的情况下工作?

shell脚本仍可以在没有#的情况下工作!(sha-bang行)

ActivityRecognition API可以在没有数据连接的情况下工作吗?

为什么此代码在没有volatile的情况下可以正常工作?

KVM可以在没有libvirt的情况下工作吗?

Telnet客户端可以在没有Telnet服务器的情况下工作吗?

apache2可以在没有conf文件的情况下工作吗?

蓝牙外围设备可以在没有USB设备的情况下工作吗?

为什么有些jsfiddle示例可以在没有外部URL的情况下工作

Express 会话可以在没有 cookie 的情况下工作吗?

为什么 ping 在没有功能和 setuid 的情况下工作

为什么 strlen 在没有 '\0' 的情况下工作正常?

为什么 lubridate 不能在有光泽的情况下工作?

Ubuntu live cd/dvd 可以在没有安装硬盘的情况下工作吗?

当脚本在没有它的情况下正常运行时,为什么要使用`return`?

redis 客户端可以在没有安装 redis 数据存储的情况下工作吗?

我的 nginx 配置可以在没有默认服务器的情况下工作吗

laravel6 - 为什么/默认中间件在没有处理方法的情况下工作?

为什么@Autowired 在@Configuration 内部没有@Component 的情况下工作

函数可以在没有定义参数的情况下工作吗?

为什么双向@OneToMany 在没有第二次保存()的情况下工作

为什么 shell 在没有读取权限的情况下知道文件的 shebang 行中指定的解释器