web-dev-qa-db-fra.com

Démarrer et terminer le fonctionnement de TAIL via SSH à l'aide de BASH

J'essaie de surveiller les modifications d'un fichier via SSH et de les copier sur un ordinateur local à l'aide de BASH. J'ai lancé la commande suivante pour surveiller et copier:

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

Ce qui fonctionne parfaitement. Mais alors il continue à courir. Je veux terminer la queue et le ssh après une certaine période (ou lorsqu'une certaine chaîne est trouvée).

J'ai essayé la commande suivante, mais cela n'a pas fonctionné:

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

J'ai aussi essayé de passer exit et la ASCII valeur de CTRL+C via echo, mais je n'ai pas pu mettre fin/tuer la queue et ssh.

Puis j'ai essayé ce qui suit:

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

J'ai aussi essayé ceci:

#!/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"

Voici mon fichier bash en ce moment:

#!/bin/sh 

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

Des suggestions sur la façon dont je devrais procéder avec cela?

Merci d'avance.

3
Russo

On dirait que vous cherchez quelque chose comme ça:

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

Enregistrez le script ci-dessus sous le nom foo.sh ou autre, rendez-le exécutable (chmod a+x foo.sh), puis exécutez-le:

foo.sh > ~/Desktop/Modem.log
4
terdon

Voici la commande dont vous avez besoin pour faire le travail:

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

vous pouvez utiliser awk à la place comme suit:

ssh USER@Host "bash -c 'awk '1;/PATTERN/{exit}' <(tail -F /path/to/dest/log)'"> inlocal.log
3
αғsнιη