2011-01-19 64 views
4

我有一個bash腳本來完成幾個任務,包括python manage.py syncdb在新的數據庫上。該命令要求輸入,如管理員的登錄信息。目前,我只是每次都在命令行中輸入它。有沒有辦法讓我自動提供這些回覆作爲bash腳本的一部分?如何編寫一個bash腳本來提供另一個程序響應

謝謝,我真的不知道什麼bash。

我使用的是Ubuntu 10.10。

回答

3

我在SF上回答了一個similar question,但這個更通用一些,在SO上也很好。

「你想用expect這一點。這可能已經在你的機器上[嘗試which expect]。這是任何一種交互式命令行自動化的標準工具。這是一個Tcl庫中,所以你會得到一些的Tcl一路上免費的技巧,小心,這會讓人上癮。「

我應該提到在這種情況下,也有pexpect,這是一個Python期望的。

#!/path/to/expect 
spawn python manage.py syncdb 
expect "login:*" 
send -- "myuser\r" 
expect "*ssword:*" 
send -- "mypass\r" 
interact 
3

如果有問題的程序不能從stdin如讀取輸入:

echo "some input" | your_progam 

,那麼你就需要尋找到像expect和/或autoexepect

+0

我相信Python正在從stdin中讀取數據。 – 2011-01-19 03:57:55

0

你可以給默認值變量。在第4行和第5行中,如果變量RSRC和LOCAL未設置,則將它們設置爲這些默認值。這樣,你可以給的選項腳本或使用默認的

#!/bin/bash 
RSRC=$1 
LOCAL=$2 
: ${RSRC:="/var/www"} 
: ${LOCAL:="/disk2/backup/remote/hot"} 
rsync -avz -e 'ssh ' [email protected]:$RSRC $LOCAL 
0

你能做到這樣,給出的例子login.py腳本:

if __name__ == '__main__': 
    import sys 
    user = sys.stdin.readline().strip() 
    passwd = sys.stdin.readline().strip() 

    if user == 'root' and passwd == 'password': 
     print 'Login successful' 
     sys.exit(0) 

    sys.stderr.write('error: invalid username or password\n') 
    sys.exit(1) 

好credentials.txt

root 
password 

壞credentials.txt

user 
foo 

然後你就可以自動完成登錄使用:

$cat good-credentials.txt | python login.py 
Login successful 

$cat bad-credentials.txt | python login.py 
error: invalid username or password 

這種方法的下側是你以純文本格式,這是不是偉大實踐中存儲密碼。

相關問題