Как пропустить разные подсказки в BASH - PullRequest
0 голосов
/ 21 июня 2020

Я ищу способ автоматизировать выполнение скрипта, который имеет 5 подсказок: 4xYES и 1*NO. Подсказки постоянно находятся на одном месте:

да | да | да | нет | да

Примерно как в примере ниже (на основе 3 подсказок):

#!/bin/bash

read -r -p "Ready to proceed? [yes/no]: " input

if [[ "$input" = "yes" ]]
 then
  read -r -p "Or maybe abort? [yes/no]: " answer
   if [[ "$answer" = "no" ]]
    then
     read -r -p "So... proceed? [yes/no]: " response
      if [[ "$response" = "yes" ]]
       then echo "NICE JOB!!!"
      fi
   fi
fi

Очевидно, передача одного «да» или «нет» через канал в этот скрипт не получится, так как ожидаемые ответы разные. Неизвестно, есть ли способ передать несколько параметров через канал.

Я думал создать массив PROMPT=(yes no yes) и передать $i через конвейер скрипту, но это тоже не сработает , и мне не нужно выполнение скрипта cycli c для каждого $i.

Есть ли способ передать разные ответы на подсказку, если их места постоянны?

Ответы [ 2 ]

5 голосов
/ 21 июня 2020

Вы можете использовать printf и канал

printf '%s\n' yes yes yes no yes | ./script.sh

или перенаправление ввода и подстановку процесса

./script.sh < <(printf '%s\n' yes yes yes no yes)

или здесь-строку

./script.sh <<<$'yes\nyes\nyes\nno\nyes'

или здесь-документ

./script.sh <<'EOF'
yes
yes
yes
no
yes
EOF
0 голосов
/ 21 июня 2020

Путем имитации 'ввода' с новой строкой

Что-то вроде:

echo "yes\nno\nyes" | bash myscript.sh

Передайте свой bash скрипт

...