# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # binfalse() { $binfalse || return 1 # normalize return value } if [ -x /usr/bin/true ]; then bintrue=/usr/bin/true elif [ -x /bin/true ]; then bintrue=/bin/true else bintrue=true fi if [ -x /usr/bin/false ]; then binfalse=/usr/bin/false elif [ -x /bin/false ]; then binfalse=/bin/false else binfalse=false fi shopt -s lastpipe unset foo bar echo a b c | read foo echo after 1: foo = $foo unset tot declare -i tot printf "%d\n" 1 2 3 | while read foo; do tot+=$foo; done echo after 2: tot = $tot unset bar echo g h i | bar=7 echo after: $bar unset foo last printf "%s\n" a b c | while read foo; do last=$foo; done echo last = $last exit 142 | false echo $? -- ${PIPESTATUS[@]} true | false | $bintrue echo $? -- ${PIPESTATUS[@]} true | $bintrue | false echo $? -- ${PIPESTATUS[@]} set -o pipefail true | $bintrue | false echo $? -- ${PIPESTATUS[@]} true | binfalse | true echo $? -- ${PIPESTATUS[@]} set +o pipefail ${THIS_SH} ./lastpipe1.sub echo lastpipe1.sub returns $? ${THIS_SH} ./lastpipe2.sub ${THIS_SH} ./lastpipe3.sub