Ctrl+C를 누르지 않고 명령 중지(트랩 기능이 좋지 않음)

Ctrl+C를 누르지 않고 명령 중지(트랩 기능이 좋지 않음)

다음과 같이 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

  1. 함수를 정의하고 루프 외부에 트랩을 설정합니다.
  2. 기능을 사용하기 전에 정의하십시오.

노력하다:

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

관련 정보