2014-07-11 114 views
0

如何在shell腳本中使用expectsendShell腳本自動化

如何自動輸入答案。我試圖用自動輸入密碼的腳本登錄su。這是我試過,但不起作用:

#!/bin/bash 
#!/usr/bin/expect 
su 
expect "Password:" 
send -- "test" 

的錯誤信息是:

couldn't read file "Password:": no such file or directory 
./auto.sh: line 5: send: command not found 
+0

我從你的問題中刪除了各種問候,因爲我們確實在這裏幫助你。無論如何,這個問題還不是很清楚。你可以試着重新措辭嗎? –

+0

我應該在這裏添加什麼?呵呵,目標可能是? –

+0

我已添加目標。 –

回答

1

假設您想使用的密碼thepassword,以下expect腳本將登錄爲theuser做這項工作:

#!/usr/bin/expect -f 
spawn su theuser 
expect "Password: " 
send -- "thepassword\r" 
interact 

在各種陷阱:cour se,你必須提供一個正確的shebang。不要忘記行尾字符(\r),因爲它不是暗示的。

引述man expect

發送 [-flags]字符串

發送串到當前進程。例如,命令

   send "hello world\r" 

發送字符,H E的L- L O,W 0 R L d到 當前進程。 (TCL包括類printf命令(稱爲 格式),它可以建立任意複雜的字符串。)

字符被立即發送節目雖然與啉 緩衝的輸入將不能讀取字符,直到返回煤焦 ACTER是發送。 返回字符表示爲「\ r」


話雖這麼說,我無法剋制自己要提醒你在腳本文件中提供的密碼以明文形式;)根據您的實際需要,有可能是一些其他的選擇...

+0

謝謝你的答案,這對我很有幫助。我想知道\ r和\ n之間有什麼不同?呵呵,當然我不會提供密碼。我只是想知道如何使用期望。這對我來說就是一個簡單的例子呵呵:)。 –

+0

@AdityoSetyonugroho我現在並不真的_why_'expect'使用'\ r'而不是'\ n' - 但它在手冊頁中有明確的說明......我在答案中引用了相關部分。 –