O problema é que você está emitindo wait
em um subshell:
if 'wait $!';then
Como wait
é um comando interno, não um comando, ele está operando no subshell , não no seu shell atual.
A saída que você veria, mas não é, é:
wait: pid 12344 is not a child of this shell
... com um status de retorno de 1.
Para realizar seu teste, você precisará fazê-lo sem usar um subshell.
#!/bin/bash
function back()
{
sleep $1
exit $2
}
back $1 $2 &
b=$!
wait $b && echo success || echo failure
Isso fornece o resultado esperado e aguarda o tempo que você espera:
$ time ./test.sh 3 0
success
./test.sh 3 0 0.00s user 0.01s system 0% cpu 3.012 total
$ time ./test.sh 3 1
failure
./test.sh 3 1 0.00s user 0.01s system 0% cpu 3.012 total
Você pode verificar o status de saída de qualquer comando com $?
:
$ /bin/true
$ echo $?
0
$ /bin/false
$ echo $?
1
Houve alguns outros erros no seu script. Sua linha #!
foi malformada, o que corrigi. Você atribui $!
a $b
, mas não use $b
.