我正在尝试使用tee
输出到两个不同的文件。我的第一个文件基本上是tail -f /myfile
,我的第二个输出将是第一个文件的子集。我在网上看到他们说我们可以使用`|
tee >(proc1) >(proc2)
我已尝试过以上操作,但我的文件都是空白的。
这是我到目前为止所拥有的:
myscript.sh
ssh root@server 'tail -f /my/dir/text.log' | tee >(/mydir/my.log) >(grep 'string' /mydir/my.log > /mydir/mysecond.log)
myexpect.sh
#!/usr/bin/expect -f
set pass password
spawn /my/dir/myexpect.sh
expect {
"key fingerprint" {send "yes/r"; exp_contiue}
"assword: " {send "$pass\r"}
}
interact
答案 0 :(得分:1)
在您的脚本中,tee
,
tee >(/mydir/my.log)
:可以替换为tee /mydir/my.log
,因为tee
会写入stdout和文件,即/mydir/my.log grep 'string' /mydir/my.log > /mydir/mysecond.log
:正如我所提到的,tee
也会写入stdout,因此不需要grep
来自文件的字符串,你可以直接从stdout grep。使用管道来做到这一点。所以整个命令应该修改如下,
ssh root@server 'tail -f /my/dir/text.log | tee /mydir/my.log | grep --line-buffered "string" > /mydir/mysecond.log'
修改强>
您的进一步问题
tail -f
仍在等待输出正在增长的文件,命令将挂起。如果您不希望该命令被挂起,请尝试删除-f for tail
。tail
存在的选项-f,您应使用两种不同的方式来允许grep
写入文件。
tail
案例:grep
可以成功写入文件tail -f
案例:--line-buffered
grep
将在输出中使用行缓冲