次の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に書き込むことを意味します。
つまり、最大file1
128kを読み、ゼロで埋めます。
次のコマンドラインは非常に似ています。
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.