Ожидаемая команда не найдена в скрипте - PullRequest
0 голосов
/ 09 января 2019

Я установил ожидаемую команду на CentOS 7 с yum install expect -y. Я хочу автоматизировать ввод данных в моем скрипте, но похоже, что он больше не интерпретирует 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. Я получаю ошибку:

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 голосов
/ 10 января 2019

Ниже приведен пример использования 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
0 голосов
/ 09 января 2019

Вы в основном хотите сценарий 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
...