Linux 如何编写bash脚本以给出另一个程序响应

Linux 如何编写bash脚本以给出另一个程序响应,linux,bash,Linux,Bash,我有一个bash脚本,可以在一个新数据库上执行多个任务,包括python manage.py syncdb。这个命令要求输入,比如管理员的登录信息。目前,我每次都只是在命令行中输入这个。有没有一种方法可以自动提供这些回复作为bash脚本的一部分 谢谢,我对bash一无所知 我正在使用Ubuntu10.10。如果相关程序无法读取stdin的输入,例如: echo "some input" | your_progam 然后您需要查看类似于expect和/或autoexpect的内容,您可以为变量提

我有一个bash脚本,可以在一个新数据库上执行多个任务,包括
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