Como usar os widgets Ncurses em scripts de shell no Linux
- 4312
- 1247
- Mrs. Willie Beahan
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
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:
- O texto a ser exibido no widget;
- A largura do widget;
- 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
- « Introdução ao Python Web Rasping e The Beautiful Soup Library
- Kali Linux - Falha ao buscar o InRlease - Correção do repositório »