在脚本中找不到Expect命令

时间:2019-01-09 15:06:20

标签: bash shell expect

我已使用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"

2 个答案:

答案 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