2016-05-02 6 views
1

私は、APC PDU(パワーストリップ)にsshでbash/expectスクリプトを作成しようとしており、コマンドライン引数に基づいてアウトレットをリモートで再起動します。だから、新しいラインが期待されます

#!/usr/bin/expect 

#usage: pdu.sh user pass ipaddr outletNum 

set user [lrange $argv 0 0] 
set pass [lrange $argv 1 1] 
set ipaddr [lrange $argv 2 2] 
set outlet [lrange $argv 3 3] 

spawn ssh [email protected]$ipaddr 

sleep 60 

expect "*?assword*" 
send "$pass\n" 
expect ">" 

sleep 5 

send "1\n" 
expect ">" 
send "2\n" 
expect ">" 
send "1\n" 
expect ">" 

send "$outlet\n" 
expect ">" 
send "1\n" 
expect ">" 
send "2\n" 
send "yes\n" 
expect ">" 
send "1\n" 
send "yes\n" 

send "exit\n" 

SSH作品の産卵、それは正しいパスワードを入力し、その後私は、PDUに接続だし、それはオプションのインタフェースを示した後、私のスクリプトを送信します。これまでのところ私はこれを持っています1の代わりに12を入力してください(2)。混乱してもごめんなさい。ここではそれが何をするかです:

それは代わりに1の12を示し、その後、改行してから、私は具体的には、send "1\n"

この行の1の後に改行を送ってきた2。この例では\ nが機能しないのはなぜですか?ありがとうございました!

+1

通常 '\のr'はない' \ N ' –

+0

感謝の男、「Enterキーを押す」を表します。また、アウトレット番号を送信した後にクラッシュする理由を知っていますか?これは引数 "outlet"を送信した後のものです。http://i.imgur.com/SlIOZdu.png – ToxicProxy

答えて

2

\ n(UNIX改行)ではなく\ r(改行)を使用します。 また、あなたがすることによって少しあなたの期待するスクリプトを簡素化することができます:

expect { 
">" {send "1\r"; exp_continue} 
# Next expect token and response and so on 
} 
+0

Perfect。ありがとう! – ToxicProxy

関連する問題