2
私はホスト名でforeachループを実行してからexpectスクリプトを実行しようとしています。各ノードは技術サポートで出力を生成するために様々な時間を持っています。sshのforループで期待通りのスクリプトが動作しない
Usage:
./test.sh admin password
Filename: hostnames.txt
node1
スクリプト:私が得るtest.sh
#!/usr/bin/expect
set exp_internal 1
set timeout 4
set user [lindex $argv 0]
set password [lindex $argv 1]
set rootdir /home/$user
set f [open "$rootdir/hostnames.txt"]
set hosts [split [read $f] "\n"]
close $f
log_user 1
foreach host $hosts {
puts $host
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null "[email protected]$host"
expect "*assword: "
send "$password\r"
expect "#"
send "file md /TS/\r"
expect "#"
send "admin tech-support /TS/$host.ts1\r"
expect "#"
sleep 180
expect "#"
send "logout\r"
expect eof
close $spawn_id
}
エラーがhostnames.txtファイル内の唯一のノードが存在する、以下のとおりですが、techsupportがノード1に完了すると、それはエラーを返します。 hostnames.txtアップの行を改行にしてから:
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null [email protected]
ssh: : Name or service not known
send: spawn id exp6 not open
while executing
"send "$password\r""
("foreach" body line x)
invoked from within
"foreach host $hosts {
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHost..."
(file "./test4.sh" line x)
こんにちはTimさん、アップデートありがとうございました。私はそこにチェックを入れました。もしif {[string length $ host]!= 0} "....今atleastはsshエラーを表示しませんしかし、私はまだエラーが発生しています。 "send:spawn id exp6 not open" – user3897774
あなたが$ホストが空であるように見える質問であなたが見せた出力で、それはまだそうであるようですか?それはnode1でも正しく動作しますか?それは私があなたの元の質問から理解したものです。 "if {[string length $ host]" ... ...部分は、foreachループ全体をカバーしているのですか、またはspawnコマンドだけですか?申し訳ありませんが、私はこれがどこに残っているかは完全にはっきりしていません。 –
なぜそれが空の文字列を拾うのか分かりません...そのファイルにnode1以外のエントリはありません.....チェックしたら.....その文をforeachループ内で生成する直前に置く.... – user3897774