Como criar um menu em um script de shell que exibirá 3 opções em que o usuário usará as teclas de setas para mover o cursor de destaque e pressione enter para selecionar uma?
shell
shell-script
menu
Mrplow911
fonte
fonte
tput
, mas acho que o primeiro não é possível), mas você pode criar menus simples no bash comselect
: tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_06.htmldialog
pacote que cria interfaces básicas de terminal faux-GUI em scripts.Respostas:
O diálogo é uma ótima ferramenta para o que você está tentando alcançar. Aqui está o exemplo de um menu simples de 3 opções:
A sintaxe é a seguinte:
A seleção será enviada para
stderr
. Aqui está um exemplo de script usando 3 cores.No Debian, você pode instalar
dialog
através do pacote com o mesmo nome .fonte
Aqui está uma
bash
solução de script puro na forma daselect_option
função, contando apenas com as seqüências de escape ANSI e o built-inread
.Funciona no Bash 4.2.45 no OSX. As partes descoladas que podem não funcionar igualmente bem em todos os ambientes, pelo que sei são
get_cursor_row()
:key_input()
(para detectar teclas para cima / para baixo) e ascursor_to()
funções.Aqui está um exemplo de uso:
A saída é semelhante a abaixo, com a opção atualmente selecionada realçada usando a coloração ansi inversa (difícil de transmitir aqui na marcação). Isso pode ser adaptado na
print_selected()
função, se desejado.Atualização: Aqui está uma pequena extensão que
select_opt
envolve aselect_option
função acima para facilitar o uso em umacase
instrução:Exemplo de uso com 3 opções literais:
Você também pode misturar se houver algumas entradas conhecidas (Sim e Não neste caso) e aproveitar o código de saída
$?
do caso curinga:fonte