Avaliando a variável de leitura na mesma linha em um script bash

3

Eu tento obter o valor que este comando em um script bash retorna, mas parece não estar retornando nada

rr=$(read -p Enter -r)

echo "Is $rr"
read -p "java archive detected, Enter Y to download it again, N to continue $nl" -r
if [[ $REPLY =~ ^[Yy]$ ]] && [[ $(read -p Enter -r) == "Y" ]]; then

        echo "Y entered $REPLY"
        break;

    elif [[  $REPLY =~ ^[Nn]$  ]]; then

        echo "java Archive was extracted successfully to $java8Dir $nl"

    fi
    
por JohnTheBeloved 16.10.2015 / 13:02

3 respostas

4

Isso porque você está executando o read em uma substituição de comando ( $() ). Não há necessidade disso. Apenas use:

read -p Enter -r rr
echo "Is $rr"

A sintaxe var=$(command) definirá o valor de var para o que for retornado por command . O read builtin não retorna nada (além de seu status de saída, mas isso não é relevante aqui), então sua variável permanece vazia. A sintaxe de read é read VAR e definirá o valor de $VAR .

    
por 16.10.2015 / 13:20
1

a sintaxe apropriada para read é

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

(de man bash )

  • a primeira linha deve ser read -p Enter -r rr (você realmente precisa remover a barra invertida?)
  • teste interno deve ser lido

    if ... && [[ "$(read -p Enter R ; echo $R )" == "Y"  ]] ; tehn
    
por 16.10.2015 / 13:20
0

O comando read -p Enter -r colocará o valor de um tipo de usuário dentro da variável $ REPLY (no Bash). Então, isso vai funcionar:

$ read -p Enter: -r
Enter:hello
$ echo "$REPLY"
hello

portanto, se você quiser a entrada do usuário em var rr, faça isso:

$ read -p "Enter: " -r rr
Enter: hello
$ echo "$rr"
hello

Ou como uma linha:

$ read -p "Enter: " -r rr; echo "$rr"
Enter: hello
hello

Tudo o que você precisa fazer (no script) para ler a variável e depois imprimi-la é:

read -p "Enter : " -r rr
echo "Is $rr"
    
por 16.10.2015 / 22:03