有人可以向我解释为什么我看不到以下命令中“date”的输出吗?对于 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
您只能从一处重定向标准输入流。您不能指望能够从多个文件重定向它或在单个命令中处理替换。
命令
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
有关的:
答案2
按照man cat
将文件连接到标准输出。
没有 FILE 或 FILE 为 - 时,读取标准输入。
因此,如果您提供 FILE,则不会读取标准输入。
这不是 bash 功能,它也适用于(或不适用于)普通文件。