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
、
的使用存在一些问题
tee >(/mydir/my.log)
:可以用 tee /mydir/my.log
代替,因为 tee
会写入标准输出和文件,即 /mydir/my.log
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
将在输出上使用行缓冲
我正在尝试使用 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
、
tee >(/mydir/my.log)
:可以用tee /mydir/my.log
代替,因为tee
会写入标准输出和文件,即 /mydir/my.loggrep '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
将在输出上使用行缓冲
- 对于