Bashスクリプトに対して「Ctrl + c」をキャプチャしますが、このスクリプト内で開かれたプロセスについてはキャプチャしません。

Bashスクリプトに対して「Ctrl + c」をキャプチャしますが、このスクリプト内で開かれたプロセスについてはキャプチャしません。

Bashスクリプトでインタラクティブプログラムを作成しようとしています。

my_program

「Ctrl+c」で閉じたいです。ただし、これによりスクリプトも閉じます。

わかりました。

trap '' 2
my_program
trap 2

my_programただし、この場合はCtrl + cで閉じることはできません。

プログラムでCtrl + Cを許可しますが、それを実行するスクリプトを閉じない方法をご存知ですか?

編集:例を追加しました。

#!/bin/bash
my_program
my_program2

my_programCtrl + cを使用して閉じると、my_program2スクリプト全体が終了するため実行されません。

ベストアンサー1

代わりにtrap true 2orを使用する必要があります。これはbashシェルの「ヘルプトラップ」に記載されています。trap : 2trap '' 2

ARGが空の文字列の場合、シェルは各SIGNAL_SPECを無視します。それを通してコマンドを呼び出す

例:

$ cat /tmp/test
#! /bin/sh
trap : INT
cat
echo first cat killed
cat
echo second cat killed
echo done
$ /tmp/test
   <press control-C>
^Cfirst cat killed
   <press control-C>
^Csecond cat killed
done

おすすめ記事