Estou procurando criar um ambiente baseado em terminal para adaptar meu script Bash . Eu quero que fique assim:
terminal
text-user-interface
Encontre-me na floresta
fonte
fonte
dialog
qual é o que isso parece usar.dialog
o menu não é exibido (mas aceita aceitação) quando iniciado por meio de uma expressão de substituição de comando?whiptail
>dialog
Tambémtui
para o modo de janela dividida (mostrando registros, fonte e comandos com,layout reg
por exemplo, etui reg vec
para mostrar registros vetoriais na janela reg (de uma maneira não flexível, de modo que a parte não seja realmente útil: /) . IDK se Redhat escreveu o patch que acrescentou que recurso, ou mesmo quantos anos ela tem.Respostas:
A resposta do usuário é armazenada no código de saída, portanto pode ser impressa como de costume:
echo $?
(observe que0
significa "sim" e1
é "não" no mundo do shell).Em relação a outras perguntas da seção de comentários:
Para colocar na caixa de diálogo a saída de algum comando, use o mecanismo de substituição de comando
$()
, por exemplo:para dar ao usuário várias opções, você pode usar a
--menu
opção em vez de--yesno
Para armazenar a saída da escolha do usuário na variável, é necessário usar a
--stdout
opção ou alterar o descritor de saída por via--output-fd
ou manualmente, por exemplo:Esse truque é necessário porque,
dialog
por padrão, gera stderr, não stdout.E como sempre,
man dialog
é seu amigo.fonte
?
variável, tenteecho $?
.parted -l
ao usuário via caixa de diálogo, provavelmente a opção--menu
é uma opção melhor, em vez de-yesno
. Nesse caso, você precisaria brincar um pouco com os descritores para armazenar a saída na variável, por exemplo:output=$(dialog --backtitle "Package configuration" --title "Configuration sun-java-jre" --menu "$(parted -l)" 15 40 4 1 "sda1" 2 "sda2" 3 "sda3" 3>&1 1>&2 2>&3 3>&-); echo $output
--stdout
opçãoman dialog
A captura de tela da pergunta se parece com whiptail (um programa com funcionalidade reduzida, imitando o diálogo , usando newt em vez de ncurses ). A maneira como o título e os botões são renderizados é incorporada a cada programa, fazendo com que pareçam diferentes.
Aqui está um script que duplica a captura de tela original, para whiptail ou caixa de diálogo:
e, para comparação, captura de tela com whiptail:
e com o diálogo:
Além da aparência diferente do título e dos botões, a caixa de diálogo usa cores diferentes por padrão (embora isso seja configurável - veja as capturas de tela ) e usa menos linhas na tela.
dialog (e whiptail) usam bibliotecas para gerenciar a exibição de linhas, cores, etc. Mas você também pode ver o tritão usado no programa anaconda do Red Hat como uma biblioteca compartilhada chamada de python (com a mesma aparência). Na mesma linha, o programa de configuração do kernel começou como uma cópia (reduzida) da caixa de diálogo e depois evoluiu para recursos usando uma biblioteca compartilhada (sem o
lxdialog
programa original ), da mesma forma que o newt é usado no python.Do bash - você pode usar o diálogo ou o chicote para os recursos mais usados. Alguém escreveu um wrapper para aqueles (em perl) para permitir que os scripts usem mais facilmente esses ou alguns outros, mas é melhor usar o diálogo diretamente, pois o módulo perl é essencialmente denominador comum.
As fontes de diálogo incluem exemplos de todos os widgets, juntamente com a maioria das opções de linha de comando:
Leitura adicional:
fonte
Eu acredito que o pacote que você está procurando é ncurses .
A Wikipedia descreve ncurses da seguinte maneira:
É amplamente utilizado, por exemplo, na ferramenta de configuração do kernel menuconfig:
Como você está usando o bash, você pode usar o Bash Simple Curses (como mencionado por Runium no comentário abaixo).
fonte
ncurses
é uma biblioteca C (Se bem entendi) OP quer um ambiente de script (para bash).menuconfig
está escrito em C. Como alternativa adialog
, como em outras respostas, você pode mencionar Bash Simple Curses, que está escrito em bash (dependendotput
).ncurses
é a base disso e ela responde a uma versão mais geral da pergunta ... como a do título aqui :) #zenidade
.
.
outras interfaces gráficas de usuário (GUI)
interrompe a execução adicional do script, quebra-o. a linha: eco $? nunca acontecerá
fonte