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 |
comm <(head -n 2 $f) <(tail -n 2 $f) |
7 |
# stdout-json: "1\n\t\t2\n\t3\n" |
8 |
|
9 |
### Non-linear pipeline with >() |
10 |
stdout_stderr() { |
11 |
echo o1 |
12 |
echo o2 |
13 |
|
14 |
sleep 0.1 # Does not change order |
15 |
|
16 |
{ echo e1; |
17 |
echo warning: e2 |
18 |
echo e3; |
19 |
} >& 2 |
20 |
} |
21 |
stdout_stderr 2> >(grep warning) | tac >out.txt |
22 |
wait $! # this does nothing in bash 4.3, but probably does in bash 4.4. |
23 |
echo OUT |
24 |
cat out.txt |
25 |
# PROBLEM -- OUT comes first, and then 'warning: e2', and then 'o2 o1'. It |
26 |
# looks like it's because nobody waits for the proc sub. |
27 |
# http://lists.gnu.org/archive/html/help-bash/2017-06/msg00018.html |
28 |
# stdout-json: "OUT\nwarning: e2\no2\no1\n" |