1 | #!/usr/bin/env bash
|
2 | #
|
3 | # I think this is a zsh feature ported to bash.
|
4 | #
|
5 | # zsh gives /proc/self/fd/12, while bash gives /dev/fd/63
|
6 | #
|
7 | # Usage:
|
8 | # demo/process-sub.sh <function name>
|
9 |
|
10 | set -o nounset
|
11 | set -o pipefail
|
12 | set -o errexit
|
13 |
|
14 | stdout() {
|
15 | cat <(seq 2) <(seq 3)
|
16 |
|
17 | echo ---
|
18 | # Is it possible to pick up this failure?
|
19 | # Nope it gets lost
|
20 | cat <(seq 2) <(seq ZZ)
|
21 |
|
22 | echo ---
|
23 | echo pipestatus=${PIPESTATUS[@]}
|
24 | }
|
25 |
|
26 | stdin() {
|
27 | # this one hangs a little in bash
|
28 | seq 3 > >(tac)
|
29 | }
|
30 |
|
31 | stdin-shell() {
|
32 | # key difference: the SHELL ITSELF is writing to the pipe, not a forked
|
33 | # process like 'seq'
|
34 |
|
35 | echo $'1\n2\n3\n' > >(tac)
|
36 | }
|
37 |
|
38 | stdin-shell-2() {
|
39 | #{ echo 4; echo 5; echo 6; } > >(tac)
|
40 |
|
41 | echo "pid = $$"
|
42 |
|
43 | echo '__ ONE ___'
|
44 | echo 99 > >(tac)
|
45 |
|
46 | # This used to hang!
|
47 | echo '__ ONE ___'
|
48 | { echo 99; } > >(tac)
|
49 |
|
50 | echo '__ TWO ___'
|
51 | { echo 4; echo 5; } > >(tac)
|
52 | }
|
53 |
|
54 | both() {
|
55 | diff -u <(seq 2) <(seq 3) > >(tac) || true
|
56 |
|
57 | if test -n "${OIL_VERSION:-}"; then
|
58 | echo status=${_process_sub_status[@]}
|
59 | fi
|
60 |
|
61 | diff -u <(seq 2; exit 2) <(seq 3; exit 3) > >(tac; exit 5) || true
|
62 |
|
63 | if test -n "${OIL_VERSION:-}"; then
|
64 | echo status=${_process_sub_status[@]}
|
65 | fi
|
66 | }
|
67 |
|
68 |
|
69 | "$@"
|