1 |
#!/usr/bin/env bash |
2 |
|
3 |
#### Process sub input |
4 |
f=_tmp/process-sub.txt |
5 |
{ echo 1; echo 2; echo 3; } > $f |
6 |
cat <(head -n 2 $f) <(tail -n 2 $f) |
7 |
## STDOUT: |
8 |
1 |
9 |
2 |
10 |
2 |
11 |
3 |
12 |
## END |
13 |
|
14 |
#### Process sub output |
15 |
{ echo 1; echo 2; echo 3; } > >(tac) |
16 |
## STDOUT: |
17 |
3 |
18 |
2 |
19 |
1 |
20 |
## END |
21 |
|
22 |
#### Non-linear pipeline with >() |
23 |
stdout_stderr() { |
24 |
echo o1 |
25 |
echo o2 |
26 |
|
27 |
sleep 0.1 # Does not change order |
28 |
|
29 |
{ echo e1; |
30 |
echo warning: e2 |
31 |
echo e3; |
32 |
} >& 2 |
33 |
} |
34 |
stdout_stderr 2> >(grep warning) | tac >$TMP/out.txt |
35 |
wait $! # this does nothing in bash 4.3, but probably does in bash 4.4. |
36 |
echo OUT |
37 |
cat $TMP/out.txt |
38 |
# PROBLEM -- OUT comes first, and then 'warning: e2', and then 'o2 o1'. It |
39 |
# looks like it's because nobody waits for the proc sub. |
40 |
# http://lists.gnu.org/archive/html/help-bash/2017-06/msg00018.html |
41 |
## STDOUT: |
42 |
OUT |
43 |
warning: e2 |
44 |
o2 |
45 |
o1 |
46 |
## END |