我有一个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
这种方法的缺点是你用纯文本存储你的密码,这不是很好的做法。