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を押すまで最初のコマンドが実行され、2番目のコマンド(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」というメッセージが表示され、すぐに終了します。 2回目findの実行でCtrl-Cを押すと、同じ操作が行われます。 findコマンドで使用する場合と使用しない場合は、同じように機能しますsudo。 Ctrl-Cをsudoで捕まえないようにするためにそこに入れました。

最初の検索の実行中にそれを実行してCtrl-Cを押すと、次のような状況が発生します。

$ ./trap.sh 
first program
^CTrap: CTRL+C received, exit
$ 

関連情報