diff <(cat old) <(cat new) を実行するときにどの fd が使用されますか?

diff <(cat old) <(cat new) を実行するときにどの fd が使用されますか?

私がするなら:

diff <(cat old) <(cat new)

これはdiffプログラム内で内部的に動作しますか? Bashスクリプトを使用して同じトリックをどのように達成できますか?

ベストアンサー1

自分で試してみてください。

echo <(echo) <(echo)

Diff は 2 つのファイルを読み込みます。

<(...)これをbashスクリプトの引数として使用したい場合は、ファイルを「巻き戻す」(または再度開くことはできません)できないことに注意してください。だから一度読むと消えます。read一行ずつ処理することもできますし、grep何でもできます。何度も処理する必要がある場合は、その内容を変数に保存してください。

input=$(cat "$1"; printf x) # The "x" keeps the trailing empty lines.
input=${input%x}

または、一時ファイルにコピーして繰り返し読みます。

tmp=$(mktemp)
cat "$1" > "$tmp"

おすすめ記事