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.sh
3つのコマンドがすべて実行されます。
私は以前この違いを見たことがないとすぐに付け加えました(bashスクリプトを実行する2つの方法の間)。上記の違いはコマンドとは異なりますbpeek
。IBMのLSFファミリー)。 (明確に言えば、「bare」コマンドはbpeek
関数またはエイリアスではないファイルとしてチェックし、file
そのファイルを「ELF 64ビットLSB実行可能ファイル」として報告します。)
この違いのせいで混乱してしまって調べてみたいです。なぜそんなことが起こる。
私の質問は:この違いをどのように説明できますか?
simple_script.sh
もちろん、このように電話する理由はありません。
$ bash < simple_script.sh
私がここでしたことは問題を単純化することです。しかし、実際には、次の形式のコマンドを実行できるようにしたいです。
<PIPELINE> | bash
...以下の形式の複数のコマンド(1行に1つのコマンド)を<PIPELINE>
作成し、最初のコマンドだけでなくすべてのコマンドを実行したいと思います。stdout
bpeek <JOBID>
<PIPELINE>
何が起こっているのかをよりよく理解することで、すべてのコマンドが実行されるように変更できることを願っています。
しかも、何が起きているのか理解したいです。 (結局私はいつも私の無知を受け入れて頼ることができますbash <( <PIPELINE> )
。)
FWIW:問題はに限定されていませんbash
。上記bash
のように変更すると、zsh
同じことが起こります。
1もう少し正確に言うと、最初のコマンドの出力だけがbpeek
私の端末に表示されます。