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
变量中找到二进制文件来加载二进制文件,并将文件名作为二进制文件的参数。