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.
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
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