This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: retval of pipelined cmd in bash


Sören,

If you wrote all that yourself, I can't say you look like a BASH newbie. Then again, there's that "too clever by half" thing...


As an aside, I find "export NAME=value" to be clearer than "declare -x NAME=value", but that's just opinion.

As to your problem, first of all, you're only capturing the exit code when the make fails. Replace the "||" with a semicolon and ECODE will never be empty.

Secondly, you're using an odd way to test $ECODE. I usually use something like this:

if [ "$ECODE" -eq 0 ]; then
echo Safe and sound.

else
echo Uh-Oh!
fi


This has the added advantage of being portable to simpler shells like Bourne and Ash. I'm not sure about the expression facilities represented by use of the double-square-bracket notation.

Randall Schulz

P.S. No one's going to come after you if you utter the word Unix.

Unix Unix Unix Unix Unix Unix Unix Unix Unix Unix Unix Unix Unix Unix Unix

See?


Hey! Wait!! Stop that!!! You can't take my computer.
HEY! I paid for that software.
HEY!!! I WROTE that software!!
STOP. NOOOOOOOOOOOOOOOOO!!



At 13:47 2002-12-20, Soren A wrote:
Hallo Cygwains,

[Heck, I dunno... "Cygwinauts"?].

I have a possibly OT question, that is, a bash shell question. Lacking
the insight into the deepest reaches of shell-ology, I have come up
empty on all attempts to solve this one for myself. (Those attempts have
included doing `info bash' and reading the "Advanced Bash Scripting
Guide", an excellent resource available on the Web).

I am writing a shell script that chains together several commands in a
pipeline -- very *nix-ish. The first command in the pipeline is an
invocation of `make'. Here's the entire script code -- I've tried many
very elaborate or bizarre things, before this:
----------------------------------8<-----------------------------------
function powermake
{
declare -x LESS='-z-2$ -s~wR'
declare PAGER='/bin/less'
declare +x ECODE=
{ make "$@" || ECODE=$? ; } 2>&1 | tee $MAKE_ERR_TO | \
/cdv/f/scr/colormake.pl | $PAGER -O"${MAKE_ERR_TO}.colorlog"
if [[ $ECODE ]] # "0" and "1" are both TRUE; "null" is FALSE.
then $gvimexe --servername 'QUICKFIX' -q "$(cygpath -wla $MAKE_ERR_TO)"
else echo 'No "make" errors to diagnose: retval was ' '"'$ECODE'".'
fi
return $ECODE
}
----------------------------------8<-----------------------------------

The problem I am trying to solve is how to get the return value of the
`make' tool. If there was an error I need to know about it. But as it
stands, nothing that i have tried will cause me to see the VIM editor
session start up; the value in ECODE is apparently always "0".

Does anyone know how to do this -- how to pull out a return value from a
command in the middle of a pipeline?

Thanks,
Soren

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]