Bashでプロセスを置き換える

Bashでプロセスを置き換える

次のコマンドで「日付」の出力が表示されない理由を誰かが説明できますか? STDINにN個の数字を入力すると、最後の(N-1)コマンドだけが出力されますか?

[root@RAJ-RHEL6 raj]# cat < <(date) <(hostname) <(uptime) <(cat /etc/resolv.conf)
RAJ-RHEL6.5
 02:22:59 up  2:36,  1 user,  load average: 0.00, 0.00, 0.00
nameserver 10.207.26.248
[root@RAJ-RHEL6 raj]#

ベストアンサー1

1つの場所でのみ標準入力ストリームをリダイレクトできます。複数のファイルからリダイレクトしたり、単一のコマンドで代替エントリを処理したりすることは期待できません。

注文する

cat < <(date) <(hostname) <(uptime) <(cat /etc/resolv.conf)

同じですか?

cat <(hostname) <(uptime) <(cat /etc/resolv.conf) < <(date)

つまり、cat3つの入力ファイルを提供してから、出力をdate標準入力にリダイレクトします。

使用するファイルが提供されている場合、catユーティリティは標準入力ストリームを使用しませんが、特別なファイル名を使用してそれを行うことができます-

cat - <(hostname) <(uptime) <(cat /etc/resolv.conf) < <(date)

また、最後のプロセス置換は役に立たないので、コマンドは次のように書くことをお勧めします。

cat - <(hostname) <(uptime) /etc/resolv.conf < <(date)

または出力リダイレクトがないdate場合

cat <(date) <(hostname) <(uptime) /etc/resolv.conf

または単一のコマンドに置き換えて

cat <( date; hostname; uptime; cat /etc/resolv.conf )

またはプロセス置換がない場合、

date; hostname; uptime; cat /etc/resolv.conf

関連:

おすすめ記事