$: echo two>two # creates a file named two with the word two in it
$: echo one | cat < two <<< "three" << END
four
END
four
$: echo one | cat < two <<< three
three
$: echo one | cat < two
two
$: echo one | cat
one
ls | cat # works - output of ls is input for cat
ls > out; cat < out # works - ls outputs to out, then cat reads out
ls > >(cat) # works
cat < <(ls) # works
1条答案
按热度按时间eh57zj3b1#
您试图给解析器提供冲突的指令。
这就像告诉某人“在你的右边向左转”。
<
、>
和|
都指示解释器根据规则重定向I/O。请看这个
bash
示例:要知道,在命令之间放置管道字符(
|
)将第一个命令的输出链接到第二个命令的输入,因此 * 还 * 为每个命令提供与之冲突的输入/输出重定向是毫无意义的。但是
ls >out | cat
将ls
的输出发送到out
,然后将该操作的输出(没有输出,因为它已经被捕获)附加到cat
,cat
退出时没有输入或输出。如果您希望将输出既放到文件又放到控制台,那么可以使用
ls > out; cat < out
使它们成为单独的操作,或者尝试其显式地将流分割为文件和标准输出。