2013-02-05 37 views
1

背景:我正在嘗試編寫一個用於測試特殊字符密碼的expect腳本。其中一個我無法執行的測試用例是在密碼前加上了特殊字符「 - 」。例如:「-foo」 注:假設SSH關鍵是出了問題 注:假設bash shell的是,我使用在預期腳本中使用密碼變量

我的代碼外殼: 這是我的連接功能,禮貌維基百科:

proc connect {passwd} { 
     expect { 
     "yes/no" { 
      send "yes\r" 
     } 
     } 
     expect { 
     "?assword:" { 
      send "$passwd\r" 
      expect { 
       "sftp*" { 
       return 0 
       } 
      } 
     } 
     } 
     # timed out 
     return 1 

} 

set user [lindex $argv 0] 
set passwd [lindex $argv 1] 
set host [lindex $argv 2] 

spawn sftp [email protected]$host 

puts '$passwd'\r 
set rez [connect $passwd] 

在我的bash腳本我有:

passwd="-foo" 
./sftp_test $user $passwd $host 

我已經試過:從我所瞭解的問題是,外殼正在擴大變量,因此該命令被解釋爲send -foo,它表示發送的密碼無效。

我試過使用單引號作爲一般的解決方案,但密碼被拒絕(我懷疑單引號被保留)。 發送「$ passwd文件」爲「\ r」

問題:有我逃避send命令的密碼,這樣我可以用它爲密碼的特殊字符的所有排列方式(例如, $ foo和f $ oo和-foo)?

回答

1

你需要做的是這樣的:

send -- "$passwd\r" 

--表明,以短線的任何下面的話是作爲一個選項,發送命令來處理。

您可能希望使其成爲一種習慣,併爲每個發送命令執行此操作。

1

如果什麼轉義字符是$

我需要發送下面的命令,但希望保持它當作一個變量:

W $$RBLDSTS^VPRJ() 

所以,當我使用:

send "W $$RBLDSTS^VPRJ()\r"; 

我得到:

can't read "RBLDSTS": no such variable 

在這種情況下,我不得不將我的命令分配給一個變量並且使用\

set command \$\$RBLDSTS^VPRJ() 
    send "W $command\r";