Quando você escreve o comando
'./my_script.sh 1' &
você está fazendo uma substituição de comandos (veja abaixo).
Praticamente você está executando um subshell (aquele para os backticks ''
) em background ( &
) no qual ele roda seu script ( ./my_script.sh 1
).
O presente shell está aguardando o final da execução de seu subshell para executar sua saída como comandos.
O subshell está aguardando o final do seu script.
Quando você pressiona Ctrl + C interrompe esta espera, passando o sinal SIGINT
para o filho.
Neste momento o shell atual tenta executar como comando a saída obtida até agora ... e gera o erro 130
que significa "Script terminado por Control-C" [ 2 ] .
Com os backticks ''
, bem como com $()
, no bash você está fazendo uma substituição de comando [ 1 ] :
Bash performs the expansion by executing COMMAND and replacing the command substitution with the standard output of the command, with any trailing newlines deleted.
por exemplo
echo 'date' Thu Feb 6 10:06:20 CET 2003
Observe que, se você executar em segundo plano mais desses tipos de comandos
'./myscript 1' &
'./myscript 2' &
'./myscript 3' &
é sempre o shell atual que está esperando por toda a saída do filho. Um único Ctrl + C encerrará esta espera por todos juntos.
Se, em vez disso, você esperar o final do script, o shell atual tentará executar a saída quando terminar.