J'ai un script bash, dans lequel j'exécute une ligne, je dors pendant tail -f
un certain temps, puis mon fichier journal pour vérifier qu'un certain modèle est vu, j'appuie sur ctrl + c pour sortir tail -f
, puis je passe à la ligne suivante jusqu'à ce que le script bash termine l'exécution :
Voici ce que j'ai fait jusqu'à présent:
#!/bin/bash
# capture the hostname
host_name=`hostname -f`
# method that runs tail -f on log_file.log and looks for pattern and passes control to next line on 'ctrl+c'
echo "==================================================="
echo "On $host_name: running some command"
some command here
echo "On $host_name: sleeping for 5s"
sleep 5
# Look for: "pattern" in log_file.log
# trap 'continue' SIGINT
trap 'continue' SIGINT
echo "On $host_name: post update looking for pattern"
tail -f /var/log/hadoop/datanode.log | egrep -i -e "receiving.*src.*dest.*"
# some more sanity check
echo "On $host_name: checking uptime on process, tasktracker and hbase-regionserver processes...."
sudo supervisorctl status process
# in the end, enable the balancer
# echo balance_switch true | hbase shell
Le script fonctionne mais je reçois l'erreur, qu'est-ce qui doit changer / qu'est-ce que je fais mal?
./script.sh: line 1: continue: only meaningful in a `for', `while', or `until' loop
Réponses:
Le
continue
mot clé ne signifie pas ce que vous pensez qu'il signifie. Cela signifie continuer jusqu'à la prochaine itération d'une boucle. Cela n'a aucun sens en dehors d'une boucle.Je pense que tu cherches
Puisque vous ne voulez rien faire à la réception du signal (au-delà de la suppression de la tâche de premier plan), ne mettez aucun code dans le piège. Vous avez besoin d'une chaîne non vide, car la chaîne vide a une signification particulière: elle provoque l'ignorance du signal.
la source
trap : INT
L'erreur survient en raison de
trap 'continue' SIGINT
. Dehelp trap
:Donc, votre script essaie de faire la
continue
commande lors de la réception de l'SIGINT
appel maiscontinue
est utilisé uniquement dans les boucles.la source