Como obter o texto que o usuário digitou no Dialog

A caixa Inputbox serve para pedir que o usuário digite algo. A sua prima é a Passwordbox, que tem funcionamento idêntico, apenas não mostra na tela o que o usuário digita (útil para senhas).

Por exemplo, se quisermos que o usuário digite seu nome. Primeiro construímos a telinha:

dialog --inputbox 'Digite seu nome:' 0 0

Tudo bem, o usuário digita seu nome, aperta OK e poft! O nome é repetido na tela e volta o prompt. Como guardar o que foi digitado numa variável, para usar depois?

O funcionamento padrão do Dialog é: após o usuário digitar seu nome e apertar o OK, esse texto é mandado para a saída de erro (STDERR). Temos três maneiras de “pescar” esse texto:

  1. Redirecionar a STDERR para um arquivo e ler o conteúdo desse arquivo
  2. Redirecionar a STDERR para a STDOUT
  3. Usar a opção –stdout do Dialog

Veremos então essas três táticas. A primeira consiste em redirecionar para um arquivo, e é com certeza a maneira mais incômoda por precisar de um arquivo temporário, mas também é mais portável e que funciona em qualquer Shell. Como todos sabemos como fazer um redirecionamento, vamos direto ao exemplo:

dialog --inputbox 'Digite seu nome:' 0 0  2>/tmp/nome.txt

nome=$( cat /tmp/nome.txt )
echo "O seu nome é: $nome"

nome

Guardamos na variável ‘nome’ o conteúdo do arquivo temporário. A notação $(comando) para subshell será a utilizada em todo o documento. A similar usando crases também funciona, mas é facilmente confundida com aspas simples, então será evitada.

A segunda maneira é mais limpa por não precisar criar o arquivo temporário. Basta utilizar o operador 2>&1 para redirecionar a saída de erro para a saída padrão. Com o texto desejado na saída padrão, podemos definir a variável ‘nome’ diretamente:

nome=$( dialog --inputbox 'Digite seu nome:' 0 0  2>&1 )
echo "O seu nome é: $nome"

Mas acaba sendo incômodo ter que ficar redirecionando a saída de erro sempre, a cada chamada do Dialog. A terceira maneira de obter o texto leva isso em conta e usa uma opção do próprio programa para redirecionar o texto para a saída padrão, a --stdout:

nome=$( dialog --stdout --inputbox 'Digite seu nome:' 0 0 )
echo "O seu nome é: $nome"

Das três formas apresentadas, esta é a mais limpa. Assim, nos exemplos seguintes, a opção --stdout será sempre utilizada.

Ah! A caixa Inputbox também aceita um último parâmetro opcional que é o texto inicial já preechido no campo. Exemplo:

dialog --stdout --inputbox 'Digite seu nome:' 0 0 "seu nome aqui"