
これはILO2 HPサーバーを起動するスクリプトです。正常に動作しますが(サーバーの電源が入っている場合)、iLOコンソールの電源がオンになってからctrl + cを使用してスクリプトを手動で終了できるため、スクリプトは完全に非対話型ではありません。正しい^ Dをスレーブコンソールに渡すにはどうすればよいですか?やめる?
#!/usr/bin/expect -f
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
set timeout -1
set send_slow {1 .1}
spawn csh
match_max 100000
expect -exact "% "
sleep .1
send -s -- "ssh hpilo2\r"
expect -exact "ssh hpilo2\r\r
This is a private system. It is to be used solely by authorized users and may be monitored for all lawful purposes. By accessing this system, you are consenting to such monitoring.\r
\rmyuser@hpilo2's password: "
sleep .1
send -s -- "mypass\r"
expect -exact "\r
User:myuser logged-in to hpilo2.(******* / *********)\r
\r
iLO Advanced **** at Feb 28 2041\r
Server Name: \r
Server Power: Off\r
\r
</>hpiLO-> "
sleep .1
send -s -- "power on\r"
expect -exact "
\r\r
status=0\r
status_tag=COMMAND COMPLETED\r
Sat Dec 6 12:38:17 2031
\r
\r
\r
Server powering on .......\r
\r
\r
\r
</>hpiLO-> "
sleep .1
send -- "^D"
expect eof
答え1
解決策 hpilo シェルで CTRL+D が何もしないことがわかりました。シェルを終了するコマンドは..exitです。だからスクリプトの最新行を修正しました。
Server Name: \r
Server Power: Off\r
\r
</>hpiLO-> "
sleep .1
send -s -- "power on\r"
sleep 2
send -s -- "^exit\r"
今完璧に動作します