将多个命令输送到一个命令,而没有EOF信号等待



如何将多个命令的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

相关内容

  • 没有找到相关文章

最新更新