Запуск и завершение работы TAIL через SSH с использованием BASH

Я пытаюсь отслеживать изменения файла через SSH и копировать его на локальный компьютер, используя BASH. Я выполнил следующую команду для мониторинга и копирования:

ssh root@192.168.88.238 "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

Который работает отлично. Но затем он продолжает работать. Я хочу завершить хвост и SSH после определенного периода (или когда определенная строка найдена).

Я попробовал следующую команду, но она не сработала:

ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log && sleep 10 && exit"> ~/Desktop/Modem.log

Я тоже пробовал проходить exit и значение ASCII CTRL+C через эхо, но не смог завершить / убить хвост и ssh.

Тогда я попробовал следующее:

#!/bin/sh 

ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log | while read TEMPLOGLINE"> ~/Desktop/Modem.log

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

exit

Я также попробовал это:

#!/bin/sh 

ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

ssh -t root@192.168.88.238 "/X03"
ssh -t root@192.168.88.238 "exit"

Вот мой bash-файл на данный момент:

#!/bin/sh 

ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

Любые предложения о том, как мне поступить с этим?

Заранее спасибо.

2 ответа

Решение

Похоже, вы ищете что-то вроде этого:

#!/bin/bash
ssh root@192.168.88.238 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

Это команда, которая вам нужна для выполнения работы:

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
Другие вопросы по тегам