Trên Ctrl + C, hủy lệnh hiện tại nhưng tiếp tục thực thi tập lệnh


10

Tôi có một tập lệnh bash, trong đó tôi thực thi một dòng, đôi khi ngủ và sau đó tail -ftập tin nhật ký của tôi để xác minh một mẫu nhất định được nhìn thấy, tôi nhấn ctrl + c để thoát ra tail -fvà sau đó di chuyển đến dòng tiếp theo cho đến khi tập lệnh bash kết thúc thực thi :

Đây là những gì tôi đã làm cho đến nay:

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

Kịch bản hoạt động nhưng tôi gặp lỗi, những gì cần thay đổi / tôi đang làm gì sai?

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

cũng có khả năng liên quan đến khách truy cập của trang này: unix.stackexchange.com/questions/163561/NH
pestophagous

Câu trả lời:


10

Các continuetừ khóa không có nghĩa là bất cứ điều gì bạn nghĩ rằng nó có nghĩa. Nó có nghĩa là tiếp tục lặp lại tiếp theo của một vòng lặp. Nó không có ý nghĩa bên ngoài một vòng lặp.

Tôi nghĩ bạn đang tìm kiếm

trap ' ' INT

Vì bạn không muốn làm bất cứ điều gì khi nhận được tín hiệu (ngoài việc giết công việc tiền cảnh), không đặt mã vào bẫy. Bạn cần một chuỗi không trống, bởi vì chuỗi trống có một ý nghĩa đặc biệt: nó làm cho tín hiệu bị bỏ qua.


1
Hoặctrap : INT
Stéphane Chazelas 10/2/2015

1

Các lỗi phát sinh do trap 'continue' SIGINT. Từ help trap:

ARG là một lệnh được đọc và thực thi khi shell nhận được (các) tín hiệu SIGNALClickEC

Vì vậy, tập lệnh của bạn cố gắng thực hiện continuelệnh khi nhận SIGINTcuộc gọi nhưng chỉ continueđược sử dụng trong các vòng lặp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.