如果我将 #!/bin/bash 放入脚本中但使用 ksh 作为脚本,会发生什么情况?

如果我将 #!/bin/bash 放入脚本中但使用 ksh 作为脚本,会发生什么情况?

shebang 运算符用于告知将使用哪个 shell 来运行脚本。以下情况会发生什么:

#!/bin/bash

如果我输入“ksh script_name”会发生什么?

答案1

如果您输入ksh script_name,它将ksh使用参数执行script_name。这意味着它将由 ksh 执行。 shebang 仅在显式执行脚本时才重要(例如./script_name)。

答案2

简短回答: ksh 将执行该脚本并将其视为#!/bin/bash注释。

解释:每当调用任何可执行文件来执行时,bash 或任何 shell 都会调用exec()系统调用

exec()加载文件并检查文件的前 16 位以查看其可执行格式。如果找到#! ,它使用文件第一行的其余部分来查找应该启动哪个程序,并提供它尝试启动的文件(脚本)的名称作为解释程序的最后一个参数。

这就是 shebang 中指定的解释器执行脚本的方式

但是当您已经指定 ksh 并提供参数时,exec 将不会搜索 shebang,但 shell 会从$PATH变量中找到二进制文件来加载二进制文件,并将文件名作为二进制文件的参数。

相关内容