如何将多个命令的std输出到一个命令中?类似:
(cat my_program/logs/log.*;tail -0f my_program/logs/log.0) | grep "filtered lines"
我想使用管道在单个命令行上运行所有以下命令,而不会重定向到临时文件(如果可能的话)。有一个小小的细微差别,这意味着我不能使用括号。我希望最后一个命令是尾馈,所以我希望在std -in收到每行之后发生GREP - 不要等待EOF信号。
尝试使用当前的外壳代替子壳:
{ cat file1; tail -f file2; } | grep something
需要在闭合支架之前的半柱。
如果不必并行执行命令,则可以使用CAT将输出统一到单个连续流中,例如:
tail -0f log.0 | cat - log.* | grep "filtered lines"
魔术位是CAT的 - 参数;它告诉CAT服用STDIN并将其添加到要加入的输入列表(在这种情况下为LogFiles)。
好吧,我有一个混乱的解决方案(这是一个脚本 - 可悲的是,这对命令行是不可行的):
#!/bin/bash
ProcessFIFO(){
while [[ -p /tmp/logfifo ]]; do
grep "filtered lines" < /tmp/logfifo
done
}
OnExit(){
rm -f /tmp/logfifo
echo 'temp files deleted'
exit
}
# Create FIFO
mkfifo /tmp/logfifo
trap OnExit SIGINT SIGTERM
ProcessFIFO &
cat log.* > /tmp/logfifo
tail -0f log.0 > /tmp/logfifo
我曾经是@Itsbruce建议的FIFO方法,我还必须使用一段时间循环以阻止GREP以EOF信号结束:
while [[ -p /tmp/logfifo ]]
我还包括一个陷阱来删除FIFO:
trap OnExit SIGINT SIGTERM