#!/bin/bash
{ echo "1" ;
sleep 3 ;
echo "2"
} &
{ echo "a"
sleep 1
echo "b"
}
The output is
a
1
b
2
Why? Shouldn't echo "1" be executed immediately? Why the output is not
1
a
b
2
CodePudding user response:
It takes some time to run a new process to execute the background code. Also, the output doesn't have to be the same every time you run the code.
CodePudding user response:
I would say, it could be both outputs. And even any output with only constraints being that a
is before 1
and b
is before 2
:
a 1 b 2
, b 2 a 1
, a b 1 2
, a b 2 1
, b a 1 2
, b a 2 1
.
However, it is likely b
could be output before a
, because the echo b
is evaluated by the script's shell, not by a forked/cloned sub-shell...