Como usar os widgets Ncurses em scripts de shell no Linux

Como usar os widgets Ncurses em scripts de shell no Linux

Neste tutorial, aprenderemos o básico do utilitário de diálogo, para ser usado ncurses Widget em nossos scripts de shell. Veremos como instalar a caixa de diálogo nas distribuições Linux mais usadas, algumas das opções comuns que podemos usar para alterar o comportamento da caixa de diálogo, como usar alguns widgets; entre os outros: caixa de entrada, lista de controle, radiolista e sim não. Finalmente, veremos como usar os dados obtidos pelo processamento do widget.

Neste tutorial, você aprenderá:

  • Como instalar o utilitário de diálogo no Linux
  • Quais são as opções de diálogo mais relevantes
  • Como usar o InputBox, Checklist, Radiolist, Passwordbox, MSBox, Calendar e YESNO Widgets
  • Como gerenciar dados derivados do processamento do widget


Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição
Programas O utilitário de diálogo é necessário para seguir este tutorial
Outro Familiaridade com a interface da linha de comando e redirecionamentos de shell
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Instalação no Linux

O diálogo O utilitário está disponível em todos os principais repositórios padrão de distribuições Linux; portanto, podemos usar nosso gerenciador de pacotes favorito para instalá -lo. Se estamos usando o Fedora, por exemplo, podemos executar:



$ sudo dnf Install Dialog

No Debian, podemos correr:

Caixa de diálogo $ sudo apt-get

O diálogo A utilidade também está contida no repositório principal do Archlinux, para que possamos instalá -lo via Pacman:

$ sudo pacman -s diálogo

A instalação de comandos se aplica também a derivados das distribuições mencionadas acima.

Opções de diálogo comuns

Chamamos isso de opções de "comum" porque elas podem ser usadas independentemente do tipo de widget que queremos usar. Aqui vamos ver alguns deles, os que podem ser de interesse imediato quando começarmos a usar diálogo.

Configurando um título da caixa de widgets: a opção -Title

Usando o --título opção, podemos especificar uma string que será usada como o título do widget; ele será exibido no topo da caixa. Aqui está um exemplo:

$ diálogo -Título "título de diálogo" - -inputbox "Digite seu nome:" 0 0

Aqui está o que é exibido como resultado do comando acima:





Combinando widgets: a opção -e -widget:

O --e widget opção, pode ser usada para "encadear" mais widgets, para que, depois de usarmos o primeiro, somos imediatamente solicitados com o segundo. A cadeia é interrompida quando um dos diálogos retorna um status diferente de zero. Um exemplo de seu uso é:

$ diálogo \--inputbox "Digite seu nome:" 0 0 \-e-widget--inputbox "Digite sua idade:" 0 0

Depois de iniciarmos o comando acima, o primeiro widget de entrada usado para nos solicitar nosso nome será exibido. Depois de confirmarmos a entrada clicando no OK Botão, o próximo widget será exibido e seremos solicitados a inserir nossa idade.

Limpando a tela com a opção -Clear

Quando usamos o --e widget opção O conteúdo criado por um widget substitui que produzem pelo anterior. Se os widgets não ocuparem exatamente o mesmo espaço de tela, os dois conteúdos seriam misturados, e isso criaria uma bagunça.

Para evitar o conteúdo sobreposto, podemos usar o --claro opção; Quando o fazemos, o conteúdo de um widget é apagado antes que o próximo widget seja exibido: apenas a cor do fundo é preservada.

Definindo o botão A como destacado por padrão: a opção -default -botton

Dependendo do widget que estamos usando, mais de um botão pode ser exibido na tela e, por padrão, um deles é destacado por padrão, determinando a ação padrão a ser executada quando o usuário pressiona.

Podemos substituir o
Padrão de widget usando o --Button padrão opção seguida pelo nome do botão, um entre OK, sim, cancelar, não, ajuda ou extra.



Esta opção pode ser realmente útil, por exemplo, ao solicitar confirmação antes de executar um potencialmente
ação perigosa:

$ diálogo-Default-Button "Não"--inputbox "Digite seu nome:" 0 0


Como você pode ver na captura de tela, fizemos para que o botão "não" seja selecionado por padrão, para que o usuário selecione explicitamente "sim" para confirmar sua escolha.

Definir o elemento selecionado padrão em uma lista com -default -iteem

Quando usamos uma lista de verificação ou um widget de menu, o primeiro elemento na lista das opções possíveis é selecionado por padrão. Usando o --padrão-item opção e referência a um elemento, podemos usá -lo como padrão alternativo:

$ diálogo-Default-itens 2 --CheckList "Selecione:" 0 0 5 \ 1 "First Element" OFF \ 2 "Segundo Elemento" OFF \ 3 "Terceiro Elemento" OFF




Como você pode ver, no exemplo acima, referenciamos o elemento por seu marcação, 2 Nesse caso (vamos expandir isso mais tarde).

Especificando um atraso de tempo após a confirmação: a opção -Sleep

Às vezes, podemos querer que nosso aplicativo espere um certo número de segundos após o processamento de uma caixa de diálogo. Para alcançar esse comportamento, podemos usar o --dormir opção e forneça o número de segundos para esperar como um valor:

$ diálogo -Sleep 3 -Inputbox "Digite seu nome:" 0 0

Como resultado do comando acima, após o caixa de entrada O widget é exibido e o usuário atinge o DIGITAR chave, 3 Segundos são esperados antes que o próximo comando no script de chamada seja realizado.

Fornecendo um tempo limite de escolha

Em alguns casos, podemos querer dar ao usuário um número máximo de segundos para executar sua escolha. O aplicativo de diálogo fornece o --tempo esgotado opção para obter o referido comportamento. O número de segundos de tempo limite deve ser aprovado como o argumento da opção. Se após a quantidade especificada de segundos, desde que o usuário não execute sua escolha, o aplicativo sairá com um status de erro:

$ diálogo -Tempo -timeout 3 -Inputbox "Digite seu nome:" 0 0

Definindo rótulos alternativos para botões

O diálogo O utilitário fornece uma série de opções para substituir a etiqueta padrão para botões: podemos usar o --saída de saída, --Extra-Label, --Help-Reting, --sem rótulo, --OK-Label, --Sim-label Para mudar os rótulos dos botões "Exit", "Extra", "Ajuda", "Não", "OK" e "Sim", respectivamente, respectivamente.

Cada uma das opções acima mencionadas toma uma string como argumento, que é usado como o rótulo do botão. Aqui está um exemplo do uso da opção:

$ diálogo--default-botton "não" \--no-label "eu não" \-yes-label "eu faço" \-yesno "Você realmente quer formatar a partição?"0 0

O comando acima produzirá o seguinte resultado:





Widgets de diálogo

Até agora, vimos alguns dos mais úteis diálogo Opções "comuns". Agora veremos como usar alguns dos widgets disponíveis em detalhes. Antes de prosseguir, devemos especificar a sintaxe geral. Quando lançamos uma caixa de diálogo, devemos sempre fornecer três parâmetros:

  1. O texto a ser exibido no widget;
  2. A largura do widget;
  3. A altura do widget;

Se fornecermos um valor de 0 Para largura ou altura, o valor do atributo correspondente é definido automaticamente.

O widget Inputbox

O widget InputBox é usado para levar o usuário a responder a uma pergunta com uma entrada textual. O parâmetro de texto é usado para fornecer a pergunta: se a string for mais longa que a caixa de diálogo, o último será rolável. Para usar este widget, invocamos a caixa de diálogo com o --caixa de entrada opção:



Na saída, a entrada fornecida pelo usuário é exibida na saída de diálogo, que por padrão é stderr.

O widget da lista de verificação

Já vimos como o widget da lista de verificação se parece em exemplos anteriores: neste tipo de widget, uma série de opções é fornecida ao usuário que pode selecionar um ou mais deles. Para usar este widget, devemos usar o --lista de controle opção e, além dos três parâmetros padrão que devem ser passados ​​para todos os widgets, devemos fornecer também o altura da lista e as opções a serem exibidas.



O altura da linha O parâmetro é usado para definir quantas linhas devem ser exibidas de uma só vez: se o número de linhas for menor que as opções disponíveis, o menu será rolável. Se fornecermos 0 como o valor de altura da linha O número de linhas corresponderá ao número de opções.

Para cada escolha, devemos fornecer um identificador (tag), um nome e um status que pode ser desligado ou sobre. Se o status for sobre A escolha será verificada por padrão. Depois de confirmarmos nossas opções, as tags relacionadas à entrada que verificamos serão exibidas stderr:

$ DIALOG -CHECKLIST "Selecione itens:" 0 0 0 \ 1 "Choice número um" OFF \ 2 "Choice Número dois" em \ 3 "Choice número três" OFF \ 4 "Choice Número Quatro" em

Com o comando acima, lançamos o menu com 4 opções e definimos as opções 2 e 4 verificadas por padrão. A saída do comando é o seguinte:



O widget radiolista

O widget radiolista é lançado quando a caixa de diálogo é invocada com o --radiolista opção. Funciona da mesma forma que o widget da lista de verificação, com a diferença de que as opções são mutuamente exclusivas; portanto, apenas um elemento pode ser selecionado. Aqui está como usamos o widget:

$ diálogo -Radiolista "Selecione itens:" 0 0 \ 1 "Choice número um" OFF \ 2 "Choice número dois" no \ 3 "Choice número três" OFF \ 4 "Choice Número quatro" OFF


Como as opções são mutuamente exclusivas, apenas a primeira opção definida para Sobre será selecionado como padrão.



Peça ao usuário uma senha usando o widget do PasswordBox

O widget do PasswordBox é usado para permitir que um usuário insira uma senha. Por razões de segurança, o texto inserido pelo usuário não é exibido. Este comportamento pode ser modificado usando o --inseguro Opção: se o fizermos, o widget exibirá um asterisco para cada letra da senha inserida no campo correspondente.

Usamos o widget lançando diálogo com o --PasswordBox opção:

$ diálogo -Insecure -PasswordBox "Digite sua senha:" 0 0

A saída do comando acima é:



Exibindo uma mensagem com o widget do msgbox

O uso deste widget é realmente simples: é invocado chamando diálogo com o --msgbox opção e exibe uma mensagem que é o conteúdo do texto parâmetro. Um único OK O botão é exibido:

$ diálogo -msgbox "Esta é uma mensagem muito importante que deve ser lida com cuidado!"0 0




O widget do calendário

Podemos usar o widget do calendário, invocando o utilitário de diálogo com o --calendário opção. O widget vamos selecionar uma data escolhendo mês, dia e ano que são exibidos em seções separadas do widget. É possível fornecer uma data padrão, passando -a como parte do comando.

Para iniciar o widget com o “quinto dia de maio de 2020” como a data padrão, por exemplo, executaríamos o seguinte comando:

$ diálogo -Calendário "Selecione uma data:" 0 0 27 05 2020

Produzirá a seguinte saída:






Podemos mover -se entre as seções de widgets usando o ABA Chave e altere os parâmetros usando as teclas de seta. Depois de confirmar a seleção, ela é exibida para stderr no formato dia/mês/ano; Isso pode ser modificado usando o --Formato de data opção com um formato compatível com strftime especificado como argumento. Para fazer a saída no formato ano/mês/dia, por exemplo, nós executaríamos:

$ diálogo-data-formato%y/%m/%d-calendar "selecione uma data" 0 0 27 05 2020

Solicite o usuário para confirmação: o widget YESNO

Já encontramos este widget: vamos solicitar ao usuário confirmar. Ao usá -lo, especificamos a pergunta a ser feita através do texto parâmetro. Dependendo da escolha do usuário, um status de saída é retornado: 0 Se o usuário confirmar clicando no Sim botão, 1 de outra forma.

Para invocar este widget, devemos usar o --sim não opção:

$ diálogo -Yesno "Você confirma?"0 0

Aqui está o widget:



Gerenciando a saída produzida por um widget

Por padrão, a saída produzida por um widget é exibida no stderr, por exemplo, para armazenar os dados obtidos de um widget para um arquivo, tudo o que precisamos fazer é redirecionar stderr Para o referido arquivo (se você não estiver familiarizado com os redirecionamentos, pode querer dar uma olhada na introdução ao tutorial de redirecionamentos de shell):

$ DIALOG -CHECKLIST "Selecione itens:" 0 0 0 \ 1 "Choice número um" OFF \ 2 "Choice Número dois" em \ 3 "Choice número três" OFF \ 4 "Choice Número quatro" na 2> escolha.TXT

Depois que o usuário confirmar suas escolhas, eles serão escritos, separados por espaço no escolha.TXT arquivo.

E se quisermos armazenar a seleção diretamente em uma variável? Para realizar a tarefa, devemos usar o --stdout opção, para que a saída do widget seja exibida em stdin em vez de stderr:

$ escolhas = "$ (diálogo - -stdout --checklist" Selecione itens: "0 0 0 \ 1" Choice número um "OFF \ 2" Choice número dois "no \ 3" Choice Número Três "OFF \ 4" Número da escolha Número quatro "ON)"


No exemplo acima, o resultado do processamento do widget será acessível através do escolhas variável. Talvez possamos querer fazer um loop sobre eles:

$ para escolha em $ escolhas; ECHO "$ Choice"; feito 2 4

Para gerenciar o processo do sim não Widget, devemos nos comportar de maneira diferente. O referido widget, como já vimos, não produz nenhuma saída, mas altera o código de saída do comando usado para desdobá -lo de acordo com a escolha do usuário. Se o usuário confirmar e respostas afirmativamente à pergunta, o código de saída será definido como 0, caso contrário, para 1 (Isso pode parecer estranho, mas lembre -se disso 0 significa OK enquanto 1 é um status de saída que significa que um comando não foi bem -sucedido). Sabendo disso, podemos escrever algo como:

Se diálogo-Yesno "Você quer abrir uma instância de Gnome-terminal ?"0 0; então limpe o gnome-terminal FI 

Conclusões

Neste tutorial, vimos como podemos usar o diálogo aplicação a ser usada ncurses Widget em scripts de shell. Primeiro, vimos algumas opções comuns que podem ser usadas independentemente do tipo de widget, do que demos uma olhada em alguns widgets especificamente. Existem muitos outros widgets que podem ser usados ​​com diálogo: Para uma lista completa, sugiro que você dê uma olhada no manual do aplicativo.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Como integrar caixas de diálogo em scripts de shell com whiptail
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Introdução ao tutorial do Tinter para Python
  • Loops aninhados em scripts de basquete
  • Coisas para instalar no Ubuntu 22.04
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…
  • Comandos básicos do Linux
  • Instale Arch Linux na estação de trabalho VMware