Linux 如何编写bash脚本以给出另一个程序响应
我有一个bash脚本,可以在一个新数据库上执行多个任务,包括Linux 如何编写bash脚本以给出另一个程序响应,linux,bash,Linux,Bash,我有一个bash脚本,可以在一个新数据库上执行多个任务,包括python manage.py syncdb。这个命令要求输入,比如管理员的登录信息。目前,我每次都只是在命令行中输入这个。有没有一种方法可以自动提供这些回复作为bash脚本的一部分 谢谢,我对bash一无所知 我正在使用Ubuntu10.10。如果相关程序无法读取stdin的输入,例如: echo "some input" | your_progam 然后您需要查看类似于expect和/或autoexpect的内容,您可以为变量提
python manage.py syncdb
。这个命令要求输入,比如管理员的登录信息。目前,我每次都只是在命令行中输入这个。有没有一种方法可以自动提供这些回复作为bash脚本的一部分
谢谢,我对bash一无所知
我正在使用Ubuntu10.10。如果相关程序无法读取stdin的输入,例如:
echo "some input" | your_progam
然后您需要查看类似于
expect
和/或autoexpect
的内容,您可以为变量提供默认值。在第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)
good-credentials.txt
root
password
user
foo
bad-credentials.txt
root
password
user
foo
然后,您可以使用以下命令自动登录:
$cat good-credentials.txt | python login.py
Login successful
$cat bad-credentials.txt | python login.py
error: invalid username or password
这种方法的缺点是,您将密码存储在纯文本中,这不是一种很好的做法。我在SF上回答了一个问题,但这一个问题更一般,这样做很好
“您想使用它。它可能已经在您的机器上[尝试使用,期望使用”。它是任何交互式命令行自动化的标准工具。它是一个Tcl库,因此您可以免费获得一些Tcl技能。小心,它会让人上瘾。”
在本例中,我应该提到还有一个,这是一个类似Python的expect
#!/path/to/expect
spawn python manage.py syncdb
expect "login:*"
send -- "myuser\r"
expect "*ssword:*"
send -- "mypass\r"
interact