Bashの奇妙なddコマンドの複合リスト

Bashの奇妙なddコマンドの複合リスト

次のbash構成を見つけました。これは複合リストと呼ばれ、3つのcatコマンドがサブシェル環境で実行されることがわかります。私が理解していないのは、パイプがそこに取り付けられる方法と、より一般的に動作する方法です。ステップバイステップの説明 本当にありがとうございました。

これはバイナリイメージ生成スクリプトの一部なので、すでに何をしているのかを知っていますが、どのようにそこに行くのかわかりません。

export DD="dd status=noxfer bs=1k iflag=fullblock"
(
    cat $DIR/file1 /dev/zero | $DD count=128
    cat $DIR/file2 /dev/zero | $DD count=128
    cat $DIR/file3 /dev/zero
) | $DD of=$OUT_FILE count=$SIZE

私を助けることができるbashの専門家がありますか?

ありがとう

答え1

パディングを使用して3つのファイルをすべて1つにリンクしたいようです。最初の猫はファイルに/dev/zeroを追加して128KBで埋めます。 2番目と同じで、3番目も直接分類されます(また/ dev / zeroを使用して)。その後、パイプラインは3つの出力すべてを取得し、$ SIZEサイズのファイルに保存します。これにより、file1 が 128KB ブロックにあり、file2 が別の 128KB ブロックにあり、file3 が残りの部分をパディングで埋めるファイルが生成されます。

答え2

コマンドcat制御引数で指定されたすべてのファイルを生成します。
だから:

cat $DIR/file1 /dev/zero

次のコマンドが読みたいと思うまで最初からfile1ゼロに接続します。/dev/zeroパイプの次のコマンド|はです$DD count=128。これは、128 1k blocks(変数定義のbs = 1kを参照)を読み取り、stdoutに書き込むことを意味します。

つまり、最大file1128kを読み、ゼロで埋めます。

次のコマンドラインは非常に似ています。

file2最大128kまで読み込み、ゼロで埋めます。

最後の行は読み取り専用ですfile3(パディングなし)。

その後、関連付けられているすべてのストリーム(括弧内)が返され、最大キロバイトまでdd記録されます。$OUT_FILE$SIZE

簡単に言うと:

read all from file1 and pad with zeros up to 128k.
read all from file2 and pad with zeros up to 128k.
read all from file3.

それから:

Write all that was read to `$OUT_FILE` up to `$SIZE` kBytes.

関連情報