Su Ctrl + C, elimina il comando corrente ma continua a eseguire lo script


10

Ho uno script bash, in cui eseguo una riga, dormo per un po 'e poi il tail -fmio file di registro per verificare che venga visualizzato un certo modello, premo ctrl + c per uscire tail -fe quindi passare alla riga successiva fino a quando lo script bash non termina l'esecuzione :

Ecco cosa ho fatto finora:

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

Lo script funziona ma viene visualizzato l'errore, cosa deve cambiare / cosa sto facendo di sbagliato?

./script.sh: line 1: continue: only meaningful in a `for', `while', or `until' loop

potenzialmente rilevante anche per i visitatori di questa pagina: unix.stackexchange.com/questions/163561/…
pestofago

Risposte:


10

La continueparola chiave non significa qualunque cosa tu pensi che significhi. Significa continuare con la successiva iterazione di un ciclo. Non ha senso al di fuori di un ciclo.

Penso che tu stia cercando

trap ' ' INT

Dato che non si desidera fare nulla alla ricezione del segnale (oltre all'uccisione del lavoro in primo piano), non inserire alcun codice nella trappola. È necessaria una stringa non vuota, poiché la stringa vuota ha un significato speciale: fa sì che il segnale venga ignorato.


1
Oppuretrap : INT
Stéphane Chazelas,

1

L'errore sorge a causa di trap 'continue' SIGINT. Da help trap:

ARG è un comando da leggere ed eseguire quando la shell riceve il segnale SIGNAL_SPEC

Quindi lo script tenta di eseguire il continuecomando quando riceve la SIGINTchiamata ma continueviene utilizzato solo nei loop.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.