
[code]

    #!/bin/sh
    param_list=("param1" "param2" "param3")
    for param in "${param_list[@]}"
    do
      python sample.py $param
    done
    
[/code]

以上のように、ファイルにコマンドライン引数を渡してfor文で実行した際に、Ctl+c一回ではループから抜けられません。どのようにしたらよいでしょうか。


CC BY-SA 3.0
2016-04-04T08:31:02.130
23731
2020-06-20T01:52:45.177
2016-04-04T17:25:05.867
3061
10111
question
shellscript
シェルスクリプトをCtl+cで止める方法


PythonインタプリタがデフォルトでSIGINTシグナルをトラップしてPython内の例外として扱っているからではないでしょうか。

OSのデフォルトの動作にするには、Pythonスクリプト中でハンドラにSIG_DFLを設定するとか。

[code]

    import signal
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    
[/code]


CC BY-SA 3.0
2016-04-04T09:27:00.653
23735
2016-04-04T09:27:00.653
4010
23731
answer


シェルスクリプト側で trap を使うとか。

[code]

    trap 'exit 1' INT
    
[/code]


CC BY-SA 3.0
2016-04-04T11:22:54.677
23739
2016-04-04T11:22:54.677
4603
23731
answer


シェルスクリプトで終了する関数を作成し、trapを実行しましょう

[code]

    function force_exit () {
        # 何か終了処理
        exit 1
    }
    
    trap 'force_exit' 1 2 3 15
    
[/code]


CC BY-SA 4.0
2020-06-20T01:52:45.177
67818
2020-06-20T01:52:45.177
40737
23731
answer