`bash simple_script.sh`はうまくいきますが、 `bash < simple_script.sh`はうまくいかない理由をどうやって知ることができますか?

`bash simple_script.sh`はうまくいきますが、 `bash < simple_script.sh`はうまくいかない理由をどうやって知ることができますか?

simple_script.sh次の3行で構成される非常に単純なスクリプトがあります。

bpeek 123450
bpeek 123451
bpeek 123452

走れば

$ bash simple_script.sh

の3つのbpeekコマンドがすべてsimple_script.sh実行されます。

しかし、私が走ったら

$ bash < simple_script.sh

bpeek...最初のコマンドのみを実行1そしてスクリプトの実行が正常に終了しました(つまり、$?0に等しい)。

bpeek代わりに(たとえば)を置き換えると、両方の/bin/echo実行方法ともsimple_script.sh3つのコマンドがすべて実行されます。

私は以前この違いを見たことがないとすぐに付け加えました(bashスクリプトを実行する2つの方法の間)。上記の違いはコマンドとは異なりますbpeekIBMのLSFファミリー)。 (明確に言えば、「bare」コマンドはbpeek関数またはエイリアスではないファイルとしてチェックし、fileそのファイルを「ELF 64ビットLSB実行可能ファイル」として報告します。)

この違いのせいで混乱してしまって調べてみたいです。なぜそんなことが起こる。

私の質問は:この違いをどのように説明できますか?


simple_script.shもちろん、このように電話する理由はありません。

$ bash < simple_script.sh

私がここでしたことは問題を単純化することです。しかし、実際には、次の形式のコマンドを実行できるようにしたいです。

<PIPELINE> | bash

...以下の形式の複数のコマンド(1行に1つのコマンド)を<PIPELINE>作成し、最初のコマンドだけでなくすべてのコマンドを実行したいと思います。stdoutbpeek <JOBID>

<PIPELINE>何が起こっているのかをよりよく理解することで、すべてのコマンドが実行されるように変更できることを願っています。

しかも、何が起きているのか理解したいです。 (結局私はいつも私の無知を受け入れて頼ることができますbash <( <PIPELINE> )。)

FWIW:問題はに限定されていませんbash。上記bashのように変更すると、zsh同じことが起こります。


1もう少し正確に言うと、最初のコマンドの出力だけがbpeek私の端末に表示されます。

ベストアンサー1

おすすめ記事