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
これをどのように進めるべきかについての提案はありますか?
前もって感謝します。
次のようなものを探しているようです。
#!/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
これは、ジョブを実行するために必要なコマンドです。
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