Como eu preencho a entrada de um comando de leitura no Linux antes que ele seja executado?

1

Há um script em execução que instala um serviço. Ele tem alguns comandos read .

Gostaria de executá-lo como parte de um script de instalação maior (na verdade, capistrano, mas isso não importa) e pré-preencher as partes "lidas" com valores, em vez de bloquear todo o processo.

O script é executado com um único comando, digamos blah/bin/blah install , gostaria de fornecer entrada no comando, como input first_input, second_input | blah/bin/blah install

Partes relevantes do script:

      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
          ;;

O script inteiro está no link

Eu sei que posso alterar o script, mas quero apenas preencher os valores. É possível?

Bem, na verdade, importava eu usar o capistrano porque ele tem a habilidade de enviar entrada (veja a seção &block ).

Mas é interessante saber se a funcionalidade que mencionei também existe no bash.

    
por elado 05.01.2013 / 12:40

1 resposta

1

read lê stdin por padrão. Simplesmente alimente algo lá.

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

blah/blah/blah install <<< $'\n\n'
    
por 05.01.2013 / 12:59

Tags