在Linux / Unix命令行中,当使用带有多个输入的命令时,如何重定向其中一个?
例如,假设我使用cat
来连接多个文件,但我只想要一个文件的最后几行,所以我的输入是testinput1
,testinput2
和tail -n 4 testinput3
。
如何在没有任何临时文件的情况下在一行中执行此操作?
我尝试了tail -n 4 testinput3 | cat testinput1 testinput2
,但这似乎只是输入1和2。
对不好的标题感到抱歉,我不确定如何准确地说出来。
答案 0 :(得分:3)
bash提供进程替换,而不是尝试将tail
的输出传递给cat
,而是在其输入或输出连接到FIFO或其中运行进程替换 /dev/fd
中的文件(就像你的终端tty)。这允许您将进程的输出视为文件。
在正常情况下,您通常会将流程替换的输出重定向到循环,例如while read -r line; do ##stuff; done < <(process)
。但是,在您的情况下,cat
将文件本身作为参数而不是从stdin
读取,因此您省略了初始重定向,例如
cat file1 file2 <(tail -n4 file3)
因此,如果您需要将流程重定向为输入,请熟悉两种表单< <(process)
,如果您需要将流程结果视为文件,则只需<(process)
。