我已使用yum install expect -y
在CentOS 7上安装了Expect命令。我想自动化脚本中的某些输入,但似乎不再能用bash解释了。
这是我的剧本:
#!/usr/bin/expect -f
homeDir="/home"
if [ $# -eq 1 ]; then
CLIENT="$1"
./easyrsa build-client-full "$CLIENT" nopass
elif [ $# -eq 2 ]; then
CLIENT="$1"
password="$2"
set timeout -1
spawn ./easyrsa build-client-full "$CLIENT"
expect "Enter PEM pass phrase:"
send -- "$password"
expect eof
else
echo "script <username> <password (optional)>"
fi
我使用chmod +x script
使脚本可执行,并像./script
一样运行它。
我得到的错误:
脚本:line11:spawn:找不到命令无法读取文件“ Enter PEM密码:“:没有这样的文件或目录 脚本:ligne13:发送: 找不到命令无法读取文件“ eof”:没有这样的文件或 目录
如果我赚whereis expect
我明白了:
expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz
我想问一下是否有其他选择而不使用另一个库?
我也尝试使用此行代码,但这没有任何回报:
echo "$password" | ./easyrsa build-client-full "$CLIENT"
答案 0 :(得分:3)
您基本上希望在expect
脚本中包含一个bash
脚本,如下所示:
#!/bin/bash
homeDir="/home"
if [ $# -eq 1 ]; then
CLIENT="$1"
./easyrsa build-client-full "$CLIENT" nopass
elif [ $# -eq 2 ]; then
CLIENT="$1"
password="$2"
/usr/bin/expect <<EOF
...
DO EXPECT STUFF
...
EOF
else
echo "script <username> <password (optional)>"
fi
答案 1 :(得分:0)
以下是使用sexpect (Expect for Shells)的示例。仅供参考。
#!/bin/bash
homeDir="/home"
if [ $# -eq 1 ]; then
CLIENT="$1"
./easyrsa build-client-full "$CLIENT" nopass
elif [ $# -eq 2 ]; then
CLIENT="$1"
password="$2"
export SEXPECT_SOCKFILE=/tmp/sexpect.tmp.$$.sock
sexpect spawn ./easyrsa build-client-full "$CLIENT"
sexpect expect "Enter PEM pass phrase:"
sexpect send -enter "$password"
sexpect expect -eof
sexpect wait
else
echo "script <username> <password (optional)>"
fi