Ctrl+C에서 현재 명령을 종료하지만 스크립트 실행을 계속합니다.

Ctrl+C에서 현재 명령을 종료하지만 스크립트 실행을 계속합니다.

한 줄을 실행하고 잠시 잠자기 상태를 유지한 다음 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

답변1

continue키워드는 귀하가 생각하는 의미와는 전혀 관련이 없습니다. 이는 루프의 다음 반복을 계속한다는 의미입니다. 루프 외부에서는 의미가 없습니다.

찾고 계시는 것 같아요

trap ' ' INT

신호를 받은 후에는 아무 것도 하고 싶지 않으므로(포그라운드 작업 종료 제외) 트랩에 어떤 코드도 넣지 마십시오. 빈 문자열은 특별한 의미를 갖기 때문에 비어 있지 않은 문자열이 필요합니다. 즉, 신호가 무시됩니다.

답변2

보낸 사람 으로 인해 오류가 발생합니다 trap 'continue' SIGINT.help trap

ARG는 쉘이 SIGNAL_SPEC 신호를 수신할 때 읽고 실행하는 명령입니다.

따라서 스크립트는 continue호출 시 명령을 실행하려고 시도하지만 루프 내에서만 실행됩니다.SIGINTcontinue

관련 정보