2

このコマンドは非常にうまく機能します。

bash < <(echo 'ls')

このコードはどのように機能しますか?
このスクリプトの内部プロセスを理解できません。

4

3 に答える 3

5

<(anycmd)は、 anycmdの出力で一時ファイルを作成します

anycmd <、その stdin が<の右側のファイルから供給されて anycmd を実行しています。

したがって、コマンドは次と同等です

tmpf=$(mktemp)
echo 'ls' > $tmpf
bash < $tmpf
unlink $tmpf
于 2012-11-07T08:28:08.280 に答える
3

<(echo 'stuff')プロセス置換と呼ばれます。名前付きパイプ (または FIFO) を使用して、コマンドからの出力をパイプします (ただし、正確なメカニズムはシステムによって異なります)。この構文は、ファイル名を使用できる場所ならどこでも使用できます*。

program < <(command)

commandから出力を取得し、それをprogramの標準入力ストリームに渡します。

*anywhere: 一部のプログラムでは、名前付きパイプでは使用できないメモリ マッピング(「参考文献」を参照)と呼ばれる手法が使用されます。man 2 mmap適切に作成されたプログラムは、事前にファイルの種類をチェックしますが、残念ながら、すべてのプログラムが適切に作成されているわけではありません....

于 2012-11-07T08:56:18.387 に答える
0

echo ls生成しlsます。<( ... )それを含むファイルを作成します。<このファイルを の標準入力に送り、bash実行bashさせます。

于 2012-11-07T08:25:11.467 に答える