다음과 같이 for 루프에서 2개의 명령을 실행하는 스크립트를 만들려고 합니다.
#!/bin/bash
for ((i=0; i<2; i++)); do
sudo ./bin/llc test-rx -c 184
sleep 5
trap ctrl_c INT
function ctrl_c()
{
echo "Trap: CTRL+C received, exit"
exit
}
sudo ./bin/llc rxphylast
done
첫 번째 명령(test-rx)은 실행 시 계속 실행되며 Ctrl+C를 누르면 중지됩니다. bash 스크립트에서 이 명령을 중지하고 싶어서 코드에 표시된 대로 트랩 기능을 사용했습니다. 하지만 스크립트를 실행하면 Ctrl+C를 누를 때까지 첫 번째 명령이 실행되고 두 번째 명령(rxphylast)이 실행됩니다. 그래서 제 경우에는 트랩 기능이 작동하지 않습니다. 스크립트의 첫 번째 명령을 중지하는 방법에 대한 제안 사항이 있습니까?
답변1
- 함수를 정의하고 루프 외부에 트랩을 설정합니다.
- 기능을 사용하기 전에 정의하십시오.
노력하다:
#!/bin/bash
function ctrl_c() (
{
echo "Trap: CTRL+C received, exit"
exit
}
trap ctrl_c INT
for ((i=0; i<2; i++)); do
sudo ./bin/llc test-rx -c 184
sleep 5
sudo ./bin/llc rxphylast
done
./bin/llc를 사용하지 않는 또 다른 예:
#!/bin/bash
function ctrl_c()
{
echo "Trap: CTRL+C received, exit"
exit
}
trap ctrl_c INT
for ((i=0; i<2; i++)); do
echo first program
sudo find / -type f > /dev/null
sleep 5
echo second program
sudo find / -type f > /dev/null
done
첫 번째 프로그램이 find
실행되는 동안 Ctrl-C를 누르면 "Trap: CTRL+C received,exit" 메시지가 인쇄되고 즉시 종료됩니다. 두 번째 find
실행에서 Ctrl-C를 누르면 동일한 작업이 수행됩니다. find 명령과 함께 사용하든 안 사용하든 동일하게 작동합니다 sudo
. Ctrl-C를 sudo로 잡아먹지 않도록 하기 위해 거기에 넣었습니다.
첫 번째 찾기가 실행되는 동안 이를 실행하고 Ctrl-C를 누르면 발생하는 상황은 다음과 같습니다.
$ ./trap.sh
first program
^CTrap: CTRL+C received, exit
$