Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-Id: <5.2.0.9.2.20021220141745.0292f158@pop3.cris.com> X-Sender: rrschulz AT pop3 DOT cris DOT com Date: Fri, 20 Dec 2002 14:38:02 -0800 To: cygwin AT cygwin DOT com From: Randall R Schulz Subject: Re: retval of pipelined cmd in bash In-Reply-To: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1"; format=flowed Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id gBKN8J620489 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/