PS4 The value of this parameter is expanded as with PS1 and the
value is printed before each command bash displays during an
execution trace. The first character of PS4 is replicated mul‐
tiple times, as necessary, to indicate multiple levels of indi‐
rection. The default is ``+ ''.
但是,在这种情况下,“间接级别”的含义还没有公布。
当您尝试在未指定要使用的解释器的情况下执行文本文件时,系统调用会execve失败并显示ENOEXEC (Exec format error). 接下来会发生什么取决于您尝试从中执行它的 shell,如下所述:
这里的区别不在于您放置 的位置
-x
,而在于您是否指定要使用的 shell(通过 shebang 或通过使用 显式调用脚本bash -x
)。根据
man bash
,PS4
:但是,在这种情况下,“间接级别”的含义还没有公布。
当您尝试在未指定要使用的解释器的情况下执行文本文件时,系统调用会
execve
失败并显示ENOEXEC (Exec format error)
. 接下来会发生什么取决于您尝试从中执行它的 shell,如下所述:特别是,如果调用 shell 是
bash
,则脚本似乎直接由调用 shell 执行:这似乎是手册中提到的“间接”:请注意,
bash -c
此处的 strace 调用中的 代替了您的交互式 shell,而不是bash -x
您在上一个示例中使用的那个。一旦我们添加一个shebang,例如:
然后(无论是否
-x
使用set
或其他方式调用),然后execve
成功并且脚本在其自己的外壳中执行,没有“间接”:例如,如果您调用了 no-shebang 脚本
dash
,则行为会有所不同:在初始 failed 之后,execve
它将执行脚本:execve
/bin/sh