Fehler #614 » pipe_test.sh
1 |
#!/bin/bash
|
---|---|
2 |
|
3 |
# * "a || b" disables "-e" and is not reactivatable
|
4 |
# * forking removes traps
|
5 |
# * Signals are not handled while "sleep"
|
6 |
|
7 |
set -e |
8 |
set -u |
9 |
|
10 |
error=0 |
11 |
pidArray=() |
12 |
|
13 |
mainTrap()
|
14 |
{
|
15 |
echo "### Main: something happened" |
16 |
# return 0
|
17 |
}
|
18 |
|
19 |
failTrap()
|
20 |
{
|
21 |
sta=$? |
22 |
if [ "$$" != "$BASHPID" ]; then |
23 |
echo $sta > return_$BASHPID |
24 |
error=1 |
25 |
kill -s SIGINT $$ |
26 |
#echo $
|
27 |
#echo "TRAP $sta; $$; $BASHPID"
|
28 |
else
|
29 |
#echo "MAIN"
|
30 |
echo "Trap in main process? I don't think so!" |
31 |
exit 22
|
32 |
fi
|
33 |
}
|
34 |
|
35 |
fail()
|
36 |
{
|
37 |
# set -e
|
38 |
# trap failTrap EXIT
|
39 |
echo A2.1
|
40 |
gcc |
41 |
# return 22
|
42 |
echo A2.2
|
43 |
return 22
|
44 |
}
|
45 |
|
46 |
fail2()
|
47 |
{
|
48 |
# set -e
|
49 |
# trap failTrap EXIT
|
50 |
echo A3.1
|
51 |
sleep 5
|
52 |
exit 22
|
53 |
# return 22
|
54 |
echo A3.2
|
55 |
return 22
|
56 |
}
|
57 |
|
58 |
semiSucceed()
|
59 |
{
|
60 |
return -5000 |
61 |
}
|
62 |
|
63 |
succeed()
|
64 |
{
|
65 |
# set -e
|
66 |
echo A2.1 S
|
67 |
semiSucceed |
68 |
echo A2.2 S
|
69 |
return 0
|
70 |
}
|
71 |
|
72 |
runLogged()
|
73 |
{
|
74 |
trap failTrap EXIT
|
75 |
$@ &> $BASHPID.log |
76 |
}
|
77 |
|
78 |
sta=0 |
79 |
|
80 |
echo "Start: $$; $BASHPID" |
81 |
|
82 |
trap -- mainTrap SIGINT |
83 |
|
84 |
echo "A" |
85 |
# fail || sta=1
|
86 |
runLogged fail & |
87 |
subPid=$! |
88 |
pidArray+=( $subPid ) |
89 |
echo "Forked: $subPid" |
90 |
|
91 |
runLogged succeed & |
92 |
subPid=$! |
93 |
pidArray+=( $subPid ) |
94 |
echo "Forked: $subPid" |
95 |
|
96 |
runLogged fail2 & |
97 |
subPid=$! |
98 |
pidArray+=( $subPid ) |
99 |
echo "Forked: $subPid" |
100 |
|
101 |
echo "----------------------------------------" |
102 |
wait
|
103 |
|
104 |
for pid in ${pidArray[*]}; do |
105 |
echo |
106 |
echo
|
107 |
echo "CHECK $pid" |
108 |
ret=$(cat return_$pid) |
109 |
if [ "$ret" != "0" ]; then |
110 |
echo "$pid: Error $ret" |
111 |
echo "log:" |
112 |
cat $pid.log |
113 |
else
|
114 |
echo "$pid: OK" |
115 |
echo "log:" |
116 |
cat $pid.log |
117 |
fi
|
118 |
done
|
119 |
|
120 |
echo
|
121 |
|
122 |
echo "B: $sta / $error" |
123 |
|
124 |
echo "Fin." |
125 |
|
126 |
sleep 0.5
|
127 |
echo "(B: $sta / $error)" |
128 |
|
129 |
|
130 |
#---fin------------------------------------------------------------------------
|