“bash 可执行文件”和“bash -c 可执行文件”之间的区别

Gre*_*hal 9 bash

我的理解是,bash -c file这与在交互式 bash shell 中并调用 是相同的意思file,其中的bash file意思是使用 bash 解释文件(就好像它是一个 shell 脚本)。这是准确的吗?这是否是您无法运行的bash <executable>原因,因为它会尝试将文件解释为 shell 脚本而不是派生和运行 exec 文件?

cuo*_*glm 7

首先,来自bash 文档

-c 字符串

处理完选项后从字符串中读取并执行命令,然后退出。任何剩余的参数都分配给位置参数,从 $0 开始。

因此,当您提供-c选项时,bash将 string after-c视为一系列命令,然后在子进程环境中执行这些命令。因此,当您调用 时bash -c filebash将其file视为命令,通过查看PATH环境变量来找到它。如果file找到,则执行它,否则将引发 command not found 错误。

当您调用 时bash file,bash 只是将其file视为一个shell 脚本,从 读取并执行命令file,然后退出。同样,来自bash 文档

如果选项处理后参数仍然存在,并且 -c 和 -s 选项均未提供,则假定第一个参数是包含 shell 命令的文件的名称(请参阅 Shell 脚本)。当以这种方式调用 Bash 时,$0 设置为文件名,位置参数设置为其余参数。Bash 从这个文件中读取并执行命令,然后退出。Bash 的退出状态是脚本中执行的最后一个命令的退出状态。如果没有执行任何命令,则退出状态为 0。

所以,你的理解是对的。