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

Reply via email to