Это простое извлечение подстроки из переменной. Рассматриваемая переменная является первым параметром скрипта (который равен 1
).
Если у меня есть переменная FOO, я могу увидеть первые два символа ее значения с помощью $ {FOO: 0: 2}
. То же самое делается в вашем примере с первым аргументом.
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
всем процессам из группы процессов переднего плана ().