Bash 从 expect 脚本输出到两个不同的文件

Bash output from expect script to two different files

我正在尝试使用 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

在你的脚本中,tee

的使用存在一些问题
  1. tee >(/mydir/my.log):可以用 tee /mydir/my.log 代替,因为 tee 会写入标准输出和文件,即 /mydir/my.log
  2. grep 'string' /mydir/my.log > /mydir/mysecond.log:正如我提到的,tee 也会写入标准输出,因此不需要 grep 来自文件的字符串,您可以直接从标准输出中进行 grep。使用管道来做。

所以整个命令应该修改如下,

ssh root@server 'tail -f /my/dir/text.log | tee /mydir/my.log | grep --line-buffered "string" > /mydir/mysecond.log'

编辑:

关于您的进一步问题

  • 该命令将挂起,因为 tail -f 仍在等待输出不断增长的文件。如果您不想挂起该命令,请尝试删除 tail.
  • 的 -f
  • 取决于 tail 存在的选项 -f,您应使用两种不同的方式允许 grep 写入文件。
    • 对于tail情况:grep可以成功写入文件
    • 对于 tail -f 情况:--line-buffered 对于 grep 将在输出上使用行缓冲