스크립트 자체를 종료하지 않고 스크립트 내에서 명령을 취소하려면 어떻게 해야 합니까?

스크립트 자체를 종료하지 않고 스크립트 내에서 명령을 취소하려면 어떻게 해야 합니까?

스크립트 완성에 중요하지 않은 특정 스크립트 줄을 실행할 때 전체 스크립트를 종료하지 않고 특정 명령을 취소하려면 어떻게 해야 합니까?

Ctrl일반적으로 + 를 호출 c하지만 이 스크립트로 이렇게 하면 전체 스크립트가 일찍 종료됩니다. 현재 명령에 대해서만 Ctrl+를 허용하는 방법(예: 스크립트 내부에 배치된 옵션)이 있습니까 ?c

약간의 배경 지식: ~/.bash_profile실행 중인 ssh-add항목이 있지만 취소할 경우 ssh-add"오류 130"이 표시된 후 에코 라인을 표시하여 연결이 이루어지기 전에 수동으로 실행하도록 상기시키고 싶습니다.

답변1

내 생각엔 당신이 함정을 찾고 있는 것 같아요.

trap terminate_foo SIGINT

terminate_foo() {
  echo "foo terminated"
  bar
}

foo() {
  while :; do 
    echo foo
    sleep 1
  done
}

bar() {
  while :; do 
    echo bar
    sleep 1
  done
}

foo

산출:

./foo
foo
foo
foo
^C foo terminated # here ctrl+c pressed
bar
bar
...

fooCtrl+를 누를 때까지 함수를 실행한 C후 계속 실행합니다. 이 경우에는 함수입니다 bar.

답변2

#! /bin/bash

trap handle_sigint SIGINT

ignore_sigint='no'

handle_sigint () {
        if [ 'yes' = "$ignore_sigint" ]; then
                echo 'Caught SIGINT: Script continues...'
        else
                echo 'Caught SIGINT: Script aborts...'
                exit 130 # 128+2; SIGINT is 2
        fi
}

echo 'running short commands...'
sleep 1
sleep 1

ignore_sigint='yes'
echo 'running long commands...'
sleep 10
ignore_sigint='no'
echo 'End of script.'

관련 정보