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

関連:

答え2

~によるとman cat

ファイルを標準出力に接続します。

FILE がない場合、または FILE が - の場合、標準入力を読み込みます。

したがって、FILEを提供すると標準入力は読み込まれません。

これはbash機能ではなく、通常のファイルでも機能します(または機能しません)。

関連情報