Tente com a opção --stdout
:
$ SELECTION=$( dialog --stdout \
--backtitle "Make a choice" \
--menu "Take a pick" \
10 40 3 \
choice1 "First choice" \
choice2 "Second choice" \
)
Eu quero, de um script de shell bash, apresentar ao usuário um menu de opções para escolher. A seleção deve então ser armazenada em uma variável de ambiente para posterior uso posterior.
Se eu correr na linha de comando:
dialog \
--backtitle "Make a choice" \
--menu "Take a pick" \
10 40 3 \
choice1 "First choice" \
choice2 "Second choice"
então tudo funciona bem; Eu recebo o menu que eu quero, e choice1
ou choice2
é impresso de volta para mim. No entanto, se em vez disso eu corro:
SELECTION=$( dialog \
--backtitle "Make a choice" \
--menu "Take a pick" \
10 40 3 \
choice1 "First choice" \
choice2 "Second choice" \
)
então ele não funciona mais do jeito que eu quero.
dialog
sair quando eu pressionar Enter Eu tentei adicionar 2>&1
para redirecionar o stderr para o stdout, caso ele realmente estivesse sendo impresso no stderr. O único efeito perceptível disso é que agora, nada é retornado, seja da expressão de substituição de comandos ou impressa no terminal.
No meu sistema, dialog
é cdialog
1.1-20120215. A página dialog
man diz sobre --menu
que Ao sair, a tag da entrada de menu escolhida será impressa na saída da caixa de diálogo. Isto parece que deve funcionar bem com algo como o acima, mas não para mim.
Eu quero que o menu seja exibido, permitindo que o usuário escolha entre as opções disponíveis e, quando o usuário aceitar, a tag (por exemplo, choice2
) para a escolha selecionada ser armazenado na variável de ambiente $ SELECTION. Se o usuário cancelar, deve haver uma indicação clara de que (idealmente, $ SELECTION seria indefinido ou uma string de comprimento zero).
Como posso fazer isso? Que pedaço do quebra-cabeça estou faltando?
Soluções sugerindo alternativas para dialog
também são aceitáveis, desde que apresentem um menu interessante para escolher e, idealmente, o software sugerido não seja muito exótico (a disponibilidade no repositório% Stable main
do Debian é um requisito).