使用 BASH 启动和终止通过 SSH 运行的 TAIL

使用 BASH 启动和终止通过 SSH 运行的 TAIL

我正在尝试通过 SSH 监视文件的更改,并使用 BASH 将其更改复制到本地计算机。我运行以下命令来监视和复制:

ssh [email protected] "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

运行完美。但之后它继续运行。我想在一定时间后(或当找到某个字符串时)终止尾部和 ssh。

我尝试了以下命令,但没有效果:

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log && sleep 10 && exit"> ~/Desktop/Modem.log

我也尝试传递via echoexit的 ASCII 值CTRL+C,但无法结束/杀死尾部和 ssh。

然后我尝试了以下操作:

#!/bin/sh 

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log | while read TEMPLOGLINE"> ~/Desktop/Modem.log

do
   [[ "${TEMPLOGLINE}" == *"temp"* ]] && pkill -P $$ tail
done

exit

我也尝试过这个:

#!/bin/sh 

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

ssh -t [email protected] "/X03"
ssh -t [email protected] "exit"

这是我此刻的 bash 文件:

#!/bin/sh 

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

关于我该如何进行此事,有什么建议吗?

提前致谢。

答案1

听起来您正在寻找类似这样的东西:

#!/bin/bash
ssh [email protected] tail -F /media/sdcard/SA000001.log | while read line; do
    echo "$line"
    if [[ $line =~ 'temp' ]]; then
        exit
    fi
done

将上面的脚本保存为foo.sh或其他名称,使其可执行(chmod a+x foo.sh),然后运行它:

foo.sh > ~/Desktop/Modem.log

答案2

这是完成这项工作所需的命令:

ssh USER@HOST "bash -c 'sed '/PATTERN/q' <(tail -F /path/to/dest/log)'"> inlocal.log

awk也可以使用以下方法:

ssh USER@HOST "bash -c 'awk '1;/PATTERN/{exit}' <(tail -F /path/to/dest/log)'"> inlocal.log

相关内容