web-dev-qa-db-ja.com

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

exitと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

これをどのように進めるべきかについての提案はありますか?

前もって感謝します。

3
Russo

次のようなものを探しているようです。

#!/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
4
terdon

これは、ジョブを実行するために必要なコマンドです。

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
3
αғsнιη