Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!wuarchive!psuvax1!hsdndev!dartvax!eleazar.dartmouth.edu!mjm From: mjm@eleazar.dartmouth.edu (Andy Behrens) Newsgroups: comp.unix.shell Subject: Re: how to force rsh to exit with status of remote command Message-ID: <1991Jun3.180151.11210@dartvax.dartmouth.edu> Date: 3 Jun 91 18:01:51 GMT References: <18999@cgl.ucsf.EDU> Sender: news@dartvax.dartmouth.edu (The News Manager) Reply-To: andyb@coat.com (Andy Behrens) Organization: Burlington Coat Factory Lines: 87 rodgers@maxwell.mmwb.ucsf.edu (R. P. C. Rodgers, M.D.) writes: >The rsh always seems to exit with a status of 0, even if the command > on the remote hosts fails. This question gets asked fairly often. Here's a replacement for rsh that you should install on the local machine. The remote machine doesn't need to be changed provided you are running a fairly "normal" shell. Thanks to Maarten Litmaath for this little gem. ------------------------------ CUT HERE ------------------------------ #!/bin/sh # @(#)ersh 2.4 91/01/30 Maarten Litmaath # This rsh front-end returns the exit status of the remote command. # It works OK with sh/csh-compatible shells on the remote (!) side. # If there is no remote command present, /usr/ucb/rlogin is invoked. # Usage: see rsh(1). RSH=/usr/ucb/rsh RLOGIN=/usr/ucb/rlogin hostname= lflag= nflag= user= case $1 in -l) ;; *) hostname=$1 shift esac case $1 in -l) lflag=-l user=$2 shift 2 esac case $1 in -n) nflag=-n shift esac case $hostname in '') hostname=$1 shift esac case $# in 0) exec $RLOGIN $lflag ${user+"$user"} "$hostname" esac AWK=' NR > 1 { print prev; prev = $0; prev1 = $1; prev2 = $2; } NR == 1 { prev = $0; prev1 = $1; prev2 = $2; } END { if (prev1 ~ /[0-9]*[0-9]0/) exit(prev1 / 10); if (prev1 == "0") exit(prev2); print prev; exit(1); } ' exec 3>&1 $RSH "$hostname" $lflag ${user+"$user"} $nflag \ "(${*-:}); sh -c '"'echo "$0 $1" >&2'\'' $?0 "$status"' \ 2>&1 >&3 3>&- | awk "$AWK" >&2 3>&- --------------------------- END OF SCRIPT ---------------------------