1 | #!/usr/bin/env bash
|
2 | #
|
3 | # Testing compound statements with &.
|
4 |
|
5 | # NOTE: This has a very different process pattern under dash than bash!
|
6 |
|
7 | #set -o nounset
|
8 | #set -o pipefail
|
9 | set -o errexit
|
10 |
|
11 | sleep2() {
|
12 | echo one
|
13 | sleep 0.5
|
14 | echo two
|
15 | sleep 0.5
|
16 | }
|
17 |
|
18 | proc_tree() {
|
19 | local pid=$1
|
20 |
|
21 | sleep 0.1 # wait for others to start
|
22 | pstree --compact --ascii $pid
|
23 | }
|
24 |
|
25 | main() {
|
26 | # A whole AND_OR can be async
|
27 | local pid=$$
|
28 |
|
29 | sleep2 && echo DONE &
|
30 | proc_tree $pid # shows forking ONE shell
|
31 | wait
|
32 |
|
33 | # Pipeline
|
34 | sleep2 | rev && echo DONE &
|
35 | proc_tree $pid # shows forking TWO shells
|
36 | wait
|
37 | }
|
38 |
|
39 | main "$@"
|