这里有一些对“输入”的不同引用,因此我将给出一些首先要理解它的场景。 为了以最短的形式快速回答问题:
stat testfile < <($1)> outputfile
上面的代码将对测试文件执行统计,将其重定向到STDOUT并将其包含到下一个特殊功能(<()部分)中,然后将最终结果输出到新文件中(输出文件)。调用该文件,然后使用bash内置文件对其进行引用(此后每次$ 1,直到您开始一组新的指令为止)。
您的问题很好,有几种答案和解决方法,但确实会随着您的具体操作而改变。
例如,您也可以循环执行,这非常方便。在伪代码心态中,此方法的常见用法是:
run program < <($output_from_program)> my_own.log
吸收并扩展该知识,可以创建以下内容:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
这将在当前目录中执行一个简单的ls -A,然后告诉何时遍历ls -A的每个结果到(在这很棘手!)grep“ thatword”在每个结果中,并且仅执行前一个printf(红色),如果它实际上找到其中带有“ thatword”的文件。它还会将grep的结果记录到一个新的文本文件files_that_matched_thatword中。
输出示例:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
index.html
所有这些仅打印ls -A结果,没什么特别的。这次为grep添加一些东西:
echo "thatword" >> newfile
现在重新运行它:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
files_that_matched_thatword index.html newfile
Found a file: newfile:thatword
尽管也许比您目前所希望的要穷得多,但我相信保留此类便笺便会在将来的工作中为您带来更多好处。
<
(从文件到左侧的|
输入)或(从流到右侧的输入)通过管道传输。有区别。