1

Я запускаю скрипт, который устанавливает сервис. У него есть пара команд read .

Я хотел бы запустить его как часть более крупного установочного скрипта (на самом деле capistrano, но это не имеет значения) и предварительно заполнить "прочитанные" части значениями, а не блокировать весь процесс.

Сценарий запускается с помощью одной команды, скажем, blah/bin/blah install , я хотел бы предоставить входные данные для команды, такие как input first_input, second_input | blah/bin/blah install

Соответствующие части сценария:

      if [[ $NEO4J_USER == $wrapper_user ]]; then
        default_user=$wrapper_user
      else
        default_user="neo4j"
      fi

      ######### read:
      read -p "Graph-like power should be handled carefully. What user should run Neo4j? [$default_user] " proposed_user
      proposed_user=${proposed_user:-$default_user}
      if ! `id $proposed_user &> /dev/null` ; then

      ######### read:
        read -p "User \"$proposed_user\" does not yet exist. Shall I create the account for you? [Yn]" yn
        case $yn in
          [Nn]* ) echo "WARNING: Alright, but Neo4j will fail to launch until that user has been created."
          set_user $proposed_user
          ;;
        * ) create_user $proposed_user
          ;;

Весь сценарий находится на http://pastebin.com/RpJZciXq

Я знаю, что могу изменить скрипт, но я просто хочу предварительно заполнить значения. Является ли это возможным?

Ну, на самом деле, это имело значение, что я использую capistrano, потому что он имеет возможность отправлять ввод (см. Раздел &block ).

Но интересно знать, существует ли упомянутая мной функциональность и в bash.

1 ответ1

1

read читает из стандартного ввода по умолчанию. Просто накормить что-нибудь там.

echo -e '\n\n' | blah/blah/blah install

blah/blah/blah install <<< $'\n\n'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .