我有一个bash脚本,可以在新数据库上执行多项任务,包括python manage.py syncdb
。此命令要求输入,例如admin的登录信息。目前,我只是每次都在命令行中键入它。有没有办法可以自动提供这些回复作为bash脚本的一部分?
谢谢,我对bash一无所知。
我正在使用Ubuntu 10.10。
答案 0 :(得分:3)
如果相关程序无法读取stdin
的输入,例如:
echo "some input" | your_progam
然后你需要查看类似expect
和/或autoexepect
答案 1 :(得分:3)
我在SF上回答similar question,但是这个更为一般,并且最好是在SO上。
“你想使用expect。它可能已经在你的机器上[try 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
答案 2 :(得分:0)
您可以为变量指定默认值。在第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
答案 3 :(得分: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
这种方法的缺点是你用纯文本存储密码,这不是很好的做法。