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]#
您只能從一個地方重定向標準輸入流。您不能期望能夠從多個文件中重定向它或在單個命令中處理替換。
命令
cat < <(date) <(hostname) <(uptime) <(cat /etc/resolv.conf)
是相同的
cat <(hostname) <(uptime) <(cat /etc/resolv.conf) < <(date)
即,您提供
cat
三個輸入文件,然後將輸出重定向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
有關的: