将多个文件的内容提供给脚本的标准输入的简写

0x4*_*B1D 23 shell scripting bash io-redirection

假设我有一个名为 的脚本script,它读取stdin一些结果并将其输出到屏幕上。

如果我想为它提供一个文件的内容,我会输入:

$ ./script < file1.txt
Run Code Online (Sandbox Code Playgroud)

但是,如果我想以相同的方式将多个文件的内容提供给脚本,这完全可能吗?到目前为止我想出的最好的是:

cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Run Code Online (Sandbox Code Playgroud)

它使用两个命令并创建一个临时文件。有没有办法做同样的事情但绕过创建组合文件?

Bru*_*ger 26

您可以使用cat和管道:

cat file1 file2 file3 ... fileN | ./script
Run Code Online (Sandbox Code Playgroud)

你的例子,使用管道,没有临时文件:

join file1.txt file2.txt | ./script
Run Code Online (Sandbox Code Playgroud)

  • 好用的猫奖! (14认同)
  • @Bruce Ediger:我假设您只是指出了一种在没有临时文件的情况下使用 `join` 的方法,但只是为了让读者清楚:`cat f1 f2` 不会产生与 `join f1 f2` 相同的输出 (4认同)

小智 11

如果您不想使用管道,则可以使用带有进程替换的输入重定向:

./script <(cat file1 file2)
Run Code Online (Sandbox Code Playgroud)