- - PR -
シェルスクリプト中のwhileループ内でsshの実行
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-12-14 11:49
こんなスクリプトを書いています。
最初の hosta の分だけ実行してスクリプトが終了してしまいます。 もちろん ssh は実行可能な環境になっています。 ssh の行をコメントアウトすると、echo文だけが hostd まで正常に実行されます。 sshを行うことで、何か環境が変わってしまうのでしょうか。 いいお知恵をお持ちでしたら、ご教授下さい。 ---------------------------------- #!/bin/sh while read server do echo $server ssh root@${server} 'hostname' done <<EOF! hosta hostb hostc hostd EOF! ---------------------------------- [ メッセージ編集済み 編集者: syscat 編集日時 2005-12-14 12:05 ] | ||||
|
投稿日時: 2005-12-14 12:31
こんにちは
サンプル試してみました。 原因は良くわかりませんけど なぜか、ヒアドキュメントがうまく処理されなくなってしまうみたいですね。 こんな書き換えは不可ですか?
| ||||
|
投稿日時: 2005-12-14 13:56
jkさま
早速ありがとうございました。 例示頂いたように、for文に書き換えてみますと、問題なくループ出来ました。 while文にこだわりすぎていました。 while文については、気にはなりますね。 とりあえず目的の動作が出来るようになりましたので、助かりました。 ありがとうございました。 | ||||
|
投稿日時: 2005-12-14 18:57
原因は「while 文」じゃなくて、ssh でしょう。
ssh に -n を付けると解決するはずです。 | ||||
|
投稿日時: 2005-12-15 10:00
portulacaさま
ご返信頂きありがとうございました。 確かに-nを付けるとうまくいきました。 ただ、なぜそうなるのか、よく分かりません。 man によると、-n オプションの説明として --- 標準入力を /dev/null からリダイレクトするように (つまり標準入力か らの読み込みを禁止した状態に) します。 ssh をバックグラウンドで走 らせるときには、このオプションが不可欠です。 --- とあります。 今回のスクリプトはバックグラウンドで動かそうとしているわけではない のですが、標準入力とつながっていないということが重要なのでしょうか。 ここに書かれていることと、while文が途中で抜けてしまうことが頭の中で つながりません。 for文だと -n 無しでも中断しないことも関係があるのでしょうか。 申し訳ありませんが、この部分をお教え頂ければありがたいです。 |
1