Bash несколько команд с помощью параметра `-c` странное поведение сигнала?

Это простое извлечение подстроки из переменной. Рассматриваемая переменная является первым параметром скрипта (который равен 1 ).

Если у меня есть переменная FOO, я могу увидеть первые два символа ее значения с помощью $ {FOO: 0: 2} . То же самое делается в вашем примере с первым аргументом.

0
23.03.2019, 21:31
1 ответ

bash( и другая оболочка )запускают сценарии без управления заданиями, поэтому ^C уничтожит весь сценарий, а не только sleep(, потому что они оба являются частью одной и той же группы процессов переднего плана ).

Вы должны включить управление заданиями в этом скрипте с помощьюset -m:

$ bash -c 'set -m; sleep 5; echo test'
^Ctest
$

Или поймать сигнал SIGINTв скрипте:

$ bash -c 'trap : SIGINT; sleep 5; echo test'
^Ctest
$

Обратите внимание на :вместо ''; если вместо этого вы проигнорируете SIGINT, его дочерние процессы унаследуют это расположение и тоже будут его игнорировать.

I'm guessing the the SIGINT is going to the bash process instead of the inner command?

Это будет для них обоих --символ VINTR(^Cпо умолчанию )отправит сигнал SIGINTвсем процессам из группы процессов переднего плана ().

4
28.01.2020, 02:22

Теги

Похожие вопросы