如何重定向几个输入之一?

时间:2018-02-07 03:03:10

标签: linux bash unix

在Linux / Unix命令行中,当使用带有多个输入的命令时,如何重定向其中一个?

例如,假设我使用cat来连接多个文件,但我只想要一个文件的最后几行,所以我的输入是testinput1testinput2tail -n 4 testinput3

如何在没有任何临时文件的情况下在一行中执行此操作?

我尝试了tail -n 4 testinput3 | cat testinput1 testinput2,但这似乎只是输入1和2。

对不好的标题感到抱歉,我不确定如何准确地说出来。

1 个答案:

答案 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)