Operating System - HP-UX
1752788 Members
6168 Online
108789 Solutions
New Discussion юеВ

Re: rexec acts as break in ksh while loop?

 
SOLVED
Go to solution
Ryan Kogelheide
Frequent Advisor

rexec acts as break in ksh while loop?

This is probably a simple one. I have three ksh shell scripts. The first is a loop that scans a list of nodes using while and calls the second with the node as the parameter.

The second says if the node is hostname, execute the third shell script using ksh -c, otherwise execute it on the remote node using rexec.

The loop continues working until it reaches a remote node. It executes the script on the remote node, but then the loop exits.
4 REPLIES 4
Steven Sim Kok Leong
Honored Contributor
Solution

Re: rexec acts as break in ksh while loop?

Hi,

Prefer a for loop to a while loop.

first.sh:

#!/sbin/sh
for node in `cat nodelist`
do
second.sh $node
if [ -e /tmp/foundit ]
then
rm -f /tmp/foundit
exit 0
fi
done

second.sh:

#!/sbin/sh
if [ "$1" != "`hostname`" ]
then
rexec $1 third.sh
touch /tmp/foundit
else
ksh -c third.sh
fi

Hope this helps. Regards.

Steven Sim Kok Leong
Ryan Kogelheide
Frequent Advisor

Re: rexec acts as break in ksh while loop?

That seems to do the trick. Can you tell me why "for" works and "while" does not?
Robin Wakefield
Honored Contributor

Re: rexec acts as break in ksh while loop?

Hi Ryan,

With while loops, any remsh/rexec calls within the loop need to use the -n switch - here's the man entry to explain:

===================
By default, remsh reads its standard input and sends it to the remote command because remsh has no way to determine whether the remote command requires input. The -n option redirects standard input to remsh from /dev/null. This is useful when running a shell script containing a remsh command, since otherwise remsh may use input not intended for it.
===================

Because "while" uses read, but "for" doesn't, this hopefully explains the difference.

Rgds, Robin
Ryan Kogelheide
Frequent Advisor

Re: rexec acts as break in ksh while loop?

Woohoo!

That explains another problem I was having. (the -n)