Eu tenho um script bash, em que executo uma linha, durmo por algum tempo e, em seguida, tail -f
meu arquivo de log para verificar se um determinado padrão é visto, pressiono ctrl + c para sair tail -f
e depois passo para a próxima linha até que o script bash conclua a execução :
Aqui está o que eu fiz até agora:
#!/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
O script funciona, mas recebo o erro, o que precisa ser alterado / o que estou fazendo de errado?
./script.sh: line 1: continue: only meaningful in a `for', `while', or `until' loop
Respostas:
A
continue
palavra-chave não significa o que você pensa que significa. Isso significa continuar para a próxima iteração de um loop. Não faz sentido fora de um loop.Acho que você está procurando
Como você não deseja fazer nada após a recepção do sinal (além de matar o trabalho em primeiro plano), não coloque código na armadilha. Você precisa de uma string não vazia, porque a string vazia tem um significado especial: faz com que o sinal seja ignorado.
fonte
trap : INT
O erro ocorre devido a
trap 'continue' SIGINT
. Dehelp trap
:Portanto, seu script tenta executar o
continue
comando quando receberSIGINT
chamada, mas ocontinue
é usado apenas em loops.fonte