我正在尝试通过 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