我有一个非常简单的脚本,simple_script.sh
由以下三行组成
bpeek 123450
bpeek 123451
bpeek 123452
如果我跑
$ bash simple_script.sh
中的所有三个bpeek
命令simple_script.sh
都被执行。
但如果我跑
$ bash < simple_script.sh
bpeek
...仅执行第一个命令1,和脚本的运行成功终止(即$?
等于 0)。
相反,如果我要替换bpeek
为/bin/echo
(例如),则两种运行方式simple_script.sh
都会导致执行所有三个命令。
我很快补充说,我以前从未观察到这种差异(这两种运行 bash 脚本的方式之间);我上面描述的差异与命令bpeek
(它是IBM 的 LSF 套件)。 (需要明确的是,“裸”命令bpeek
解析为一个文件,而不是一个函数或别名,并将file
该文件报告为“ELF 64 位 LSB 可执行文件”。)
我对这种差异感到困惑,想弄清楚为什么它发生了。
我的问题是:我该如何解释这种差异?
当然,我没有理由simple_script.sh
这样调用:
$ bash < simple_script.sh
我在这里所做的只是为了简化这个问题。然而,在实践中,我希望能够运行以下形式的命令
<PIPELINE> | bash
...where<PIPELINE>
写入stdout
以下形式的多个命令bpeek <JOBID>
(每行一个命令),我希望执行所有这些命令,而不仅仅是第一个命令。
我希望通过更好地了解正在发生的事情,我将能够以<PIPELINE>
确保所有命令得到执行的方式进行修改。
此外,我只是想了解到底发生了什么。 (毕竟,我总是可以接受我的无知,并诉诸于bash <( <PIPELINE> )
。)
FWIW:问题并不特定于bash
.如果我bash
用zsh
上面的替换,会发生完全相同的事情。
1更准确地说,只有第一个命令的输出bpeek
显示在我的终端上。