/bin/sh => STDIN & functions, var scope messing
rank1seeker at gmail.com
rank1seeker at gmail.com
Fri May 31 18:00:00 UTC 2013
Redirections > and >> don't put it in a subshell.
Only pipe |, which means only STDIN affects/triggers this behaviour.
Does < operator also does it, as it is also STDIN?
Anyway, I don't care for executing binaries, but I do care if that is part of sh's code, as function is.
It messes var scopes.
And finally if we take into account this:
> For example… in pc-sysinstall…
>
> ./backend/functions-extractimage.sh- tar cvf - . 2>/dev/null | tar -xpv -C ${FSMNT} ${TAROPTS} -f - 2>&1 | tee -a ${FSMNT}/.tar-extract.log
> ./backend/functions-extractimage.sh: if [ $? -ne 0 ]
>
> That's a big no-no.
>
> If your first tar (the initial lvalue to the first pipe) fails… but your second tar succeeds (rvalue to the first pipe)… you won't catch that failure in your checking of $?
>
> Also, if the first tar succeeds, but the second tar fails, AND the final rvalue (the tee) succeeds… you also miss the error code.
>
> I call this the "piped return-status conflation issue". Basically… anytime you want to check the return-status in shell… and you care about lvalue-failures in a pipe-chain… you must rewrite it to either:
>
> (a) be aware of the problem (I've in the past written wrappers that will test the previous return status and abort the chain in such an event)
>
> (b) undo the pipe-chain and store your results for incremental processing… checking the return status after each filter.
>
> --
> Devin
sh's behaviour must be changed regarding pipeing
> > Curious. Which of the two behaviours is POSIXly correct?
>
> Both. As per XCU 2.12 Shell Execution Environment, each command in a
> multi-command pipeline may or may not be executed in a subshell
> environment.
>
> Behaviour different from our sh is most often encountered in the various
> versions of the real Korn shell (ksh88 and ksh93), which execute the
> last command in a pipeline in the current shell environment.
>
> If things like jobs | cat work, that can also be explained using this
> rule.
>
> --
> Jilles Tjoelker
>
Domagoj Smolčić
More information about the freebsd-hackers
mailing list