스크립트 완성에 중요하지 않은 특정 스크립트 줄을 실행할 때 전체 스크립트를 종료하지 않고 특정 명령을 취소하려면 어떻게 해야 합니까?
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
...
foo
Ctrl+를 누를 때까지 함수를 실행한 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.'