2011-01-19 97 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 

这种方法的下侧是你以纯文本格式,这是不是伟大实践中存储密码。

相关问题