У меня есть скрипт bash, в котором я выполняю строку, некоторое время сплю, а затем tail -f
мой файл журнала, чтобы убедиться, что виден определенный шаблон, я нажимаю ctrl + c, чтобы выйти из него, tail -f
а затем перехожу на следующую строку, пока скрипт bash не завершит выполнение :
Вот что я сделал до сих пор:
#!/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.sh: line 1: continue: only meaningful in a `for', `while', or `until' loop
Ответы:
continue
Ключевое слово не означает , что вы думаете , что это означает. Это означает переход к следующей итерации цикла. Это не имеет смысла вне цикла.Я думаю, что вы ищете
Поскольку вы не хотите ничего делать при получении сигнала (кроме убийства на переднем плане), не ставьте код в ловушку. Вам нужна непустая строка, потому что пустая строка имеет особое значение: она вызывает игнорирование сигнала.
источник
trap : INT
Ошибка возникает из-за
trap 'continue' SIGINT
. Отhelp trap
:Таким образом, ваш скрипт пытается выполнить
continue
команду при полученииSIGINT
вызова, ноcontinue
он используется только в циклах.источник