That is pretty horrible. I was trying to construct something similar manually, but you finished it off.
I suggest adding spaces between the initial ((((s, to avoid this pitfall described at http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18: If a character sequence beginning with "((" would be parsed by the shell as an arithmetic expansion if preceded by a '$', shells which implement an extension whereby "((expression))" is evaluated as an arithmetic expression may treat the "((" as introducing as an arithmetic evaluation instead of a grouping command. A conforming application shall ensure that it separates the two leading '(' characters with white space to prevent the shell from performing an arithmetic evaluation. Guru, does this fix the problem? Thanks, Ben. On Tue, Oct 01, 2013 at 03:13:31PM -0700, Duffie Cooley wrote: > What about this? > > referenced from here. > > http://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another/70675#70675 > > diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in > index 1684ddc..5286e12 100644 > --- a/utilities/ovs-lib.in > +++ b/utilities/ovs-lib.in > @@ -41,6 +41,11 @@ ovs_ctl_log () { > echo "$@" >> "${logdir}/ovs-ctl.log" > } > > +stdintoexitstatus () { > + read exitstatus > + return $exitstatus > +} > + > ovs_ctl () { > case "$@" in > *"=strace"*) > @@ -51,7 +56,7 @@ ovs_ctl () { > ;; > *) > echo "`date -u`:$@" >> "${logdir}/ovs-ctl.log" > - "${datadir}/scripts/ovs-ctl" "$@" 2>&1 | tee -a > "${logdir}/ovs-ctl.log" > + (((("${datadir}/scripts/ovs-ctl" "$@" 2>&1 ; echo $? > &3) > | tee -a "${logdir}/ovs-ctl.log" ) 3>&1) | stdintoexitstatus) 4>&1 > ;; > esac > } > > > Thanks, > > Duffie > > > On 10/01/2013 11:48 AM, Gurucharan Shetty wrote: > > This patch works for me, but it is a little hacky. > > > > diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in > > index 1684ddc..b0cdaf2 100644 > > --- a/utilities/ovs-lib.in > > +++ b/utilities/ovs-lib.in > > @@ -51,7 +51,13 @@ ovs_ctl () { > > ;; > > *) > > echo "`date -u`:$@" >> "${logdir}/ovs-ctl.log" > > - "${datadir}/scripts/ovs-ctl" "$@" 2>&1 | tee -a > > "${logdir}/ovs-ctl.log" > > + unique=`(uuidgen) 2>/dev/null` || unique=`date +"%Y %b %d %T"` > > + mkfifo "/tmp/${unique}" > > + tee -a "${logdir}/ovs-ctl.log" < "/tmp/${unique}" & > > + "${datadir}/scripts/ovs-ctl" "$@" > "/tmp/${unique}" 2>&1 > > + rc=$? > > + rm "/tmp/${unique}" > > + return $rc > > ;; > > esac > > } > > > > On Tue, Oct 1, 2013 at 10:11 AM, Gurucharan Shetty <shet...@nicira.com> > > wrote: > >> On Mon, Sep 30, 2013 at 7:27 PM, Duffie Cooley <dcoo...@nicira.com> wrote: > >>> From: Duffie Cooley <dcoo...@nicira.com> > >>> This is a fix for a request to make sure that the openvswitch status > >>> command > >>> in rhel based distros gives a useful exit status. That was fixed in > >>> > >>> commit 5e0c05bc058c78a11be6747f62e6ad88e5d06b70 > >>> debian: Fix exit status of openvswitch-switch init script "status" command > >>> > >>> > >>> > >>> Signed-off-by: Duffie Cooley <dcoo...@nicira.com> > >>> --- > >>> rhel/etc_init.d_openvswitch | 3 ++- > >>> 1 file changed, 2 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/rhel/etc_init.d_openvswitch b/rhel/etc_init.d_openvswitch > >>> index 7e64132..6a53cef 100755 > >>> --- a/rhel/etc_init.d_openvswitch > >>> +++ b/rhel/etc_init.d_openvswitch > >>> @@ -5,7 +5,7 @@ > >>> # chkconfig: 2345 09 91 > >>> # description: Manage Open vSwitch kernel modules and user-space daemons > >>> > >>> -# Copyright (C) 2009, 2010, 2011 Nicira, Inc. > >>> +# Copyright (C) 2009, 2010, 2011, 2013 Nicira, Inc. > >>> # > >>> # Licensed under the Apache License, Version 2.0 (the "License"); > >>> # you may not use this file except in compliance with the License. > >>> @@ -81,6 +81,7 @@ case $1 in > >>> ;; > >>> status) > >>> ovs_ctl status > >>> + exit $? > >>> ;; > >>> version) > >>> ovs_ctl version > >>> -- > >>> 1.8.1.2 > >>> > >> I don't think this helps. The exit status is always 0. I broke this > >> with my implementation of 'ovs_ctl' in ovs-lib tee'ing the o/p to > >> ovs-ctl.log. tee will return an exit status of success even though the > >> previous command returned an exit status of 1. > >> > >> I can use the PIPESTATUS variable. But I don't think it is POSIX > >> compliant. Any other ideas? > >> > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev