Saya memiliki skrip bash, di mana saya mengeksekusi sebuah baris, sleep untuk beberapa saat dan kemudian tail -f
file log saya untuk memverifikasi pola tertentu terlihat, saya tekan ctrl + c untuk keluar dari tail -f
dan kemudian pindah ke baris berikutnya sampai skrip bash selesai dieksekusi :
Inilah yang telah saya lakukan sejauh ini:
#!/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
Script berfungsi tetapi saya mendapatkan kesalahan, apa yang perlu diubah / apa yang saya lakukan salah?
./script.sh: line 1: continue: only meaningful in a `for', `while', or `until' loop
Jawaban:
Kata
continue
kunci tidak berarti apa pun yang Anda pikir artinya. Itu berarti melanjutkan ke iterasi loop berikutnya. Tidak masuk akal di luar lingkaran.Saya pikir Anda sedang mencari
Karena Anda tidak ingin melakukan apa pun setelah menerima sinyal (selain membunuh pekerjaan latar depan), jangan masukkan kode ke dalam jebakan. Anda memerlukan string yang tidak kosong, karena string kosong memiliki makna khusus: itu menyebabkan sinyal diabaikan.
sumber
trap : INT
Kesalahan muncul karena
trap 'continue' SIGINT
. Darihelp trap
:Jadi skrip Anda mencoba melakukan
continue
perintah ketika menerimaSIGINT
panggilan tetapicontinue
hanya digunakan dalam loop.sumber