Я новичок в тестировании bash и хотел создать образ докера для тестирования командной строки. Я обнаружил «ожидание» и захотел опробовать его на этом примере сценария bash. Единственная проблема заключается в том, что он не может создать файл.
данные/que.sh
#!/bin/bash
echo "Enter your name"
read $REPLY
echo "Enter your age"
read $REPLY
echo "Enter your salary"
read $REPLY
данные/test.sh
#!/usr/bin/expect -f
set timeout 2
spawn /data/que.sh
expect "Enter your name\r"
send -- "I am Steve\r"
expect "Enter your age\r"
send -- "2\r"
expect "Enter your salary\r"
send -- "10k\r"
expect eof
docker-compose.yml
services:
linux-expect:
container_name: cont-alpine-linux-expect
image: img-alpine-linux-expect
build:
context: .
Докфайл
FROM alpine:latest
RUN apk add --update nodejs-current npm
USER root
RUN apk update && apk add expect
RUN mkdir data
COPY data /data
CMD ["node", "-e","setTimeout(() => console.info(999999), 99999999)"]
# Just run temporary timeout so we can interact with script
команда терминала
новый терминал
Я получаю сообщение об ошибке при поиске этого файла, но он существует. Я root-пользователь.
Ошибка
"породить /data/que.sh" (файл «data/test.sh», строка 4)
Проблема в том, что он не может найти bash
. У вас есть
#!/bin/bash
в качестве первой строки вашего сценария, поэтому оболочка ищет bash для его запуска. Но bash не установлен в образах Alpine.
Вы можете увидеть, работает ли ваш скрипт с помощью /bin/sh
. Я думаю, это ракушка ash
на изображениях Alpine. Если не помогло, можно установить bash
из образа с помощью apk.
Извините, я не знаком с ожиданием, поэтому не знаю.
Это не верно:
read $REPLY
команда read
принимает имена переменных в качестве аргументов.
После первого эха, поскольку REPLY пуст, у вас есть пустая read
, которая будет использовать переменную REPLY по умолчанию.
После второго эха bash видит read I am Steve
I
получает значение 2am
и Steve
получают пустые значения.После третьего эха, потому что ОТВЕТ не прижился после предыдущего read
, у вас снова read I am Steve
I
получает значение «10 тыс.»am
и Steve
получают пустые значения.
Спасибо. ошибка новичка. Могу ли я также спросить: если тест не пройден, то есть я ожидаю неправильного текста, как мне определить, что это не удалось? В настоящее время он просто зависает и не выдает никаких ошибок.