2013-02-03 23 views
36

我正在創建我自己的bash腳本,但我現在卡住了。基本上,該腳本將用於在CentOS中自動進行服務器設置。有些軟件通常要求用戶輸入密碼。我希望腳本將我生成並存儲爲變量的密碼,而不是詢問用戶。在bash腳本中模擬用戶輸入

在安裝期間出現消息「New password:」時,如何讓腳本將值存儲在變量$key中,就好像用戶使用bash腳本鍵入了它一樣?

回答

38

你會發現'expect'命令會做你需要它做的事情。它廣泛可用。在這裏看到的例子:http://www.thegeekstuff.com/2010/10/expect-examples/

(非常粗略的例子)

#!/usr/bin/expect 
set pass "mysecret" 

spawn /usr/bin/passwd 

expect "password: " 
send "$pass" 
expect "password: " 
send "$pass" 
+0

是的,我用期待很多! – Napolux

+0

這裏的夥計是「New password:」,當腳本用yum安裝東西時(例如mysql),你可以向我展示這個特殊情況的代碼片段。我主要使用sed並從未使用expect。教程你提供了,它似乎你可以使用期望當用戶想要輸入的東西 – Werulz

+1

看看'#!'行 - 這是一個Expect *腳本*。整個事情由'expect'運行,而不是'bash'運行,所以它是用Expect語言編寫的(基本上是Tcl),重要的命令在那裏 - 'spawn'用來啓動你正在交互的命令,'expect'等待它發送一個特定的字符串,'發送'發送回覆,如果你想把控制權交還給用戶,你可以用'interact'來完成。 –

2

下面是一段代碼,我寫的劇本Ÿ索要用戶的密碼,並設置它們的/ etc/passwd文件。你可以操縱它有點可能得到你需要的東西:

echo -n " Please enter the password for the given user: " 
read userPass 
useradd $userAcct && echo -e "$userPass\n$userPass\n" | passwd $userAcct > /dev/null 2>&1 && echo " User account has been created." || echo " ERR -- User acount creation failed!" 
+0

你們給我錯了。我不想讀取用戶輸入。我想要做的是當(yum安裝東西)需要用戶輸入密碼時,它應該*放置*在變量中找到的值$ key作爲輸入,而不是要求用戶輸入內容 – Werulz

+0

就像在安裝過程中出現「New Password:」提示時那樣,在$ key中設置值爲通過 – Werulz

+0

那樣,只有期待才能完成這項工作。例如,當外部程序要求用戶輸入時,我曾用期望傳遞一個值。就像我想將我的ssh密鑰添加到我的ssh-agent時一樣,我會自動將密碼短語通過期望傳遞給ssh-add。 – kevoroid