如何编写一个bash脚本来给另一个程序响应

我有一个bash脚本来完成几个任务,包括新的数据库上的python manage.py syncdb 。 这个命令要求input,比如admin的login信息。 目前,我只是每次input这个命令行。 有没有一种方法可以自动提供这些回复作为bash脚本的一部分?

谢谢,我真的不知道什么关于bash。

我使用的是Ubuntu 10.10。

我在SF上回答了一个类似的问题 ,但是这个问题比较一般,在SO上也很好。

“你想用这个东西,它可能已经在你的机器上了[尝试which expect ],它是任何类型的交互式命令行自动化的标准工具,它是一个Tcl库,所以你将得到一些Tcl技巧免费的方式,小心,这是上瘾的。

在这种情况下,我应该提到,还有一个观点 ,就是Python期望的。

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

如果有问题的程序无法读取stdin输入,例如:

 echo "some input" | your_progam 

那么你需要看看像expect和/或autoexepect

您可以将默认值赋予变量。 在第4行和第5行中,如果变量RSRC和LOCAL没有被设置,它们被设置为那些默认值。 这样,您可以将选项提供给脚本或使用默认脚本

 #!/bin/bash RSRC=$1 LOCAL=$2 : ${RSRC:="/var/www"} : ${LOCAL:="/disk2/backup/remote/hot"} rsync -avz -e 'ssh ' user@myserver:$RSRC $LOCAL 

你可以这样做,给一个例子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 

这种方法的缺点是你用纯文本存储你的密码,这不是很好的做法。