作者 主題: Linux expect 腳本執行問題  (閱讀 4841 次)

0 會員 與 1 訪客 正在閱讀本文。

fighting neeb

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
Linux expect 腳本執行問題
« 於: 2011-12-01 16:30 »
最近剛接觸expect,寫了一個測試的小腳本印出ls資訊 expect.sh

#!/usr/bin/expect
set timeout 30
spawn ssh root@61.66.101.101
expect "*assword:"
send "password\n"
expect "*#"
send_user "ls\n"
expect "*"
send "eof"

在執行時卻印不出ls資訊,執行的結果如下

[root@localhost ~]# expect /var/www/html/expect.sh
spawn ssh root@61.66.101.101
reverse mapping checking getaddrinfo for ll-61-66-101-101.ll.sparqnet.net failed - POSSIBLE BREAK-IN ATTEMPT!
root@61.66.101.101's password:
Last login: Thu Dec  1 15:51:16 2011 from 61.66.101.102
[root@ll-61-66-101-101 ~]# ls
[root@localhost ~]#
輸入ls但想要顯示的資訊沒出來

不知道是不是send_user指令的問題
可是用send "ls\n"的話就會變成
[root@ll-61-66-101-101 ~]# [root@localhost ~]#
連ls都沒有輸入

想請問對expect比較了解的人,我要怎麼改才能印出ls的資訊
Linux版本為CentOS release 5.7
« 上次編輯: 2011-12-01 16:41 由 fighting neeb »

廉價勞工

  • 活潑的大學生
  • ***
  • 文章數: 213
    • 檢視個人資料
Re: Linux expect 腳本執行問題
« 回覆 #1 於: 2011-12-01 18:07 »
#!/usr/bin/expect
set timeout 30
spawn ssh root@61.66.101.101
expect "*assword:"
send "password\n"
expect "*#"
send "ls\n"
set accum {}
    expect {
        -regexp {..*} {
            set accum "${accum}$expect_out(0,string)"
                set timeout 1
            exp_continue
        }
    }

expect "*"
send "eof"


照紅色部分修改試試看
錢少、事多、離家遠…
位低、權輕、責任重…

fighting neeb

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
Re: Linux expect 腳本執行問題
« 回覆 #2 於: 2011-12-05 17:48 »
謝謝你的回答,我後來把腳本改成下面這樣就可以回傳ls指令了
#!/usr/bin/expect
set timeout 30
spawn ssh root@61.66.101.101
expect "*assword:"
send "wellpower\n"
expect "*#"
send "ls\n"
;expect "*#"
;send "exit\n"
exit 1