Bash

Bash 中的程序替換

  • July 15, 2019

有人可以向我解釋為什麼我沒有從下面的命令中看到“日期”的輸出嗎?對於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

有關的:

引用自:https://unix.stackexchange.com/questions/530191