我的理解是,bash -c file
这与在交互式 bash shell 中并调用 是相同的意思file
,其中的bash file
意思是使用 bash 解释文件(就好像它是一个 shell 脚本)。这是准确的吗?这是否是您无法运行的bash <executable>
原因,因为它会尝试将文件解释为 shell 脚本而不是派生和运行 exec 文件?
首先,来自bash 文档:
-c 字符串
处理完选项后从字符串中读取并执行命令,然后退出。任何剩余的参数都分配给位置参数,从 $0 开始。
因此,当您提供-c
选项时,bash
将 string after-c
视为一系列命令,然后在子进程环境中执行这些命令。因此,当您调用 时bash -c file
,bash
将其file
视为命令,通过查看PATH
环境变量来找到它。如果file
找到,则执行它,否则将引发 command not found 错误。
当您调用 时bash file
,bash 只是将其file
视为一个shell 脚本,从 读取并执行命令file
,然后退出。同样,来自bash 文档:
如果选项处理后参数仍然存在,并且 -c 和 -s 选项均未提供,则假定第一个参数是包含 shell 命令的文件的名称(请参阅 Shell 脚本)。当以这种方式调用 Bash 时,$0 设置为文件名,位置参数设置为其余参数。Bash 从这个文件中读取并执行命令,然后退出。Bash 的退出状态是脚本中执行的最后一个命令的退出状态。如果没有执行任何命令,则退出状态为 0。
所以,你的理解是对的。