在linux/unix命令行中,当使用具有多个输入的命令时,如何重定向其中一个输入?
例如,假设我使用cat
连接多个文件,但我只需要一个文件的最后几行,所以我的输入是testinput1
、testinput2
和tail -n 4 testinput3
。
在没有任何临时文件的情况下,如何在一行中完成此操作?
我尝试了tail -n 4 testinput3 | cat testinput1 testinput2
,但这似乎只接受了输入1和2。
很抱歉标题不好,我不知道该怎么说。
最佳答案
bash不试图将tail
的输出通过管道传递到cat
,而是提供进程替换,其中进程替换运行时,其输入或输出连接到/dev/fd
中的fifo或文件(如终端tty)。这允许您将进程的输出视为文件。
在正常情况下,通常会将进程替换的输出重定向到循环中,例如while read -r line; do ##stuff; done < <(process)
。但是,在您的情况下,cat
将文件本身作为参数,而不是从stdin
读取,因此您省略了初始重定向,例如。
cat file1 file2 <(tail -n4 file3)
因此,请熟悉这两种表单,如果需要将流程重定向为输入,则需要
< <(process)
,如果需要将流程结果视为文件,则只需<(process)
。