- PR -

Shell にて rsh を while で実行する際の不具合

1
投稿者投稿内容
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-05-10 17:21
いつもお世話になっています。

rsh を利用した shell を作成中に期待した動作をしないため、相談させてください。

コード:
#!bin/sh

while read RHOST
do

 echo "Check 1 : $RHOST"
 echo "rsh $RHOST \"ls -l\""
 rsh $RHOST "ls -l"
 echo "Check 2 : $RHOST"

done << __EOF__
host1
host2
__EOF__




このようなテスト shell を作成しましたが、
host1 を処理後にループを抜けてしまう状態となっています。

解決策など、わかりましたらご教示いただけると助かります。
よろしくお願いします。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-05-10 18:31
こんばんは。
今回のケースでは、read のみならず、rsh コマンドも入力を処理してしまうのが問題でしょう。次のようなコードでもそうですね。
コード:
while read i; do
 echo $i
 cat >/dev/null
done <<_EOF_
aaa
bbb
_EOF_


ループ変数に代入する、host1, host2 が予め分かっているなら、while read RHOST 〜 ではなく、for RHOST in 〜 にした方が分かりやすいでしょう。
…それよりも、rsh に適切な入力リダイレクト ( 多分 </dev/null ) を設定すれば良さそうな気もします。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-05-11 09:15
angel 様

ありがとうございます。
ご指摘いただいた通りに /dev/null を入力リダイレクトして
期待通りの動作を得ることができました。

コード:
#!bin/sh

while read RHOST
do

 echo "Check 1 : $RHOST"
 echo "rsh $RHOST \"ls -l\""
 rsh $RHOST "ls -l" < /dev/null
 echo "Check 2 : $RHOST"

done << __EOF__
host1
host2
__EOF__



また、for 文を用いても期待通りの動作をいたしました。

コード:
for RHOST in `echo "host1 host2"`
do

 echo "Check 1 : $RHOST"
 echo "rsh $RHOST \"ls -l\""
 rsh $RHOST "ls -l"
 echo "Check 2 : $RHOST"

done



> rsh コマンドも入力を処理してしまう

これについて全く認識が無く、ご助言いただきまして、
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)