2016-01-12 60 views
0
function put_SwVersion_MENAME() 
{ 
    output=$(expect -c ' 
     log_user 0 
     match_max 2000 
     spawn ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 
     expect "*?Password:*" 
     send "dummmy\r" 
     expect "*#" 
     send "cat /storage/system/abcd.txt\r" 
     expect "cat /torage/system/abcd.txt\n" 
     puts '"\$expect_out(buffer)"' 
    ') 
     echo $output 
     return $TRUE 
    } 

    put_SwVersion_MENAME 

輸出值含有提示,而不是發送輸出如何可以解析以獲得正確的值CAT的要求值?解析expect_out緩衝忽略提示並得到發送命令

+0

看看這個:http://stackoverflow.com/questions/15013481/in-bash-how-to-store-a-return-value-in-a-variable –

+0

@user:這是不同的,這是期待編程,獲得服務器執行的價值本地腳本,實際上我得到它的工作,我會盡快更新代碼,但我得到的價值是錯誤的 –

回答

0

提示應正確給出。由於命令和模式都相同,它會導致匹配我們自己發送的命令。 (即cat /storage/system/abcd.txt\r)。

相反,匹配的是如下的提示廣義的做法,

set prompt "\r\n(.*?)(#|%|>|\\\$) $" 

在這裏,我們躲過了字面上的美元符號反斜線和最後一塊錢是爲最終的行正則表達式。

#!/bin/bash 
function put_SwVersion_MENAME() { 
     output=$(expect -c ' 
     log_user 0 
     set prompt "\r\n(.*?)(#|%|>|\\\$) $" 
     spawn ssh [email protected] 
     expect "password" 
     send "welcome123\r" 
     expect -re $prompt 
     send "cat /storage/system/abcd.txt\r" 
     expect -re $prompt 
     puts "$expect_out(1,string)" 
     ') 
     echo "===>$output<==" 
} 
put_SwVersion_MENAME 
+0

我試過你的輸入,但我沒有這樣的元素數組如果我去1,如果我去(0,字符串)我再次得到我的提示 –

+0

在代碼中添加'exp_internal 1'並共享輸出 – Dinesh

0

我太有面子類似的問題,它得到了添加\ r後解決,並期待之間英寸這可以幫助你。請嘗試。

expect "password" 
    send "welcome123\r" 
    expect -re $prompt 
    send "cat /storage/system/abcd.txt\r" 
    expect -re $prompt 
    send "\r" 
    expect -re $prompt 
    puts "$expect_out(buffer)"