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:
- Redirecionar a STDERR para um arquivo e ler o conteúdo desse arquivo
- Redirecionar a STDERR para a STDOUT
- 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"
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"