Ajuda em bash script - Dialog [RESOLVIDO]

1. Ajuda em bash script - Dialog [RESOLVIDO]

gohan nascimento junior
gohan123

(usa Outra)

Enviado em 13/02/2023 - 11:52h

Bom dia a todos, sou programador junior e estou com um problema com a execução de itens com o dialog e não estou conseguindo resolver. Se alguém puder dar uma mão, agradeço.. O problema é o seguinte : O código abaixo que criei, gera um menu dinâmico a partir de um txt populado de outro script.. a geração do menu dinâmico funciona e esta ok, cada linha do menu tem 3 partes : um ID (deveria ser numérico), um texto (que deveria aparecer na linha do menu para ou usuário escolher) e um status (que não precisaria aparecer para o usuário, mas tudo bem).. O menu gera sem problemas, o problema é que eu gostaria de para cada seleção que o usuário escolhe-se, executasse o código correspondente do ID da linha e logo após, eliminasse a linha correspondente do menu. Caso eu reexecutasse de novo o código, o novo menu criado não deveria mais trazer a linha que foi executada exitosamente, mas não estou conseguindo fazer isso .. Código abaixo :

#!/bin/bash
# Define o nome do arquivo de relatório
report_file="scripts/hmenu/result.txt"
# Lê o arquivo result.txt no subdiretório scripts/ hmenu /
while read line; do
# Extrai o ID, o texto e o status da linha
id=$(echo $line | awk '{print $1}')
text=$(echo $line | awk '{print $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9}')
status=$(echo $line | awk '{print $10}')
# Adiciona o item de checkbox ao menu
options+=("$id" "$text" "$status")
done < $report_file

# Exibe o menu em forma de checkbox
selected=$(dialog --backtitle "Selecione os itens desejados:" \
--checklist " " 20 60 15 \
"${options[@]}" \
--output-fd 1 \
--separate-output \
--scrollbar \
3>&1 1>&2 2>&3)

# Executa cada item selecionado
for item in $selected; do
if [ "$item" == "1" ]; then
echo "Executando o código para o Item 1..."
sed -i "/ $item/d" $report_file

fi
if [ "$item" == "2" ]; then
echo "Executando o código para o Item 2..."
sed -i "/ $item/d" $report_file
fi

done

Agradeço antecipadamente a ajuda!!!!



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/02/2023 - 22:47h

gohan123 escreveu:

Bom dia a todos, sou programador junior e estou com um problema com a execução de itens com o dialog e não estou conseguindo resolver. Se alguém puder dar uma mão, agradeço.. O problema é o seguinte : O código abaixo que criei, gera um menu dinâmico a partir de um txt populado de outro script.. a geração do menu dinâmico funciona e esta ok, cada linha do menu tem 3 partes : um ID (deveria ser numérico), um texto (que deveria aparecer na linha do menu para ou usuário escolher) e um status (que não precisaria aparecer para o usuário, mas tudo bem).. O menu gera sem problemas, o problema é que eu gostaria de para cada seleção que o usuário escolhe-se, executasse o código correspondente do ID da linha e logo após, eliminasse a linha correspondente do menu. Caso eu reexecutasse de novo o código, o novo menu criado não deveria mais trazer a linha que foi executada exitosamente, mas não estou conseguindo fazer isso .. Código abaixo :

#!/bin/bash
# Define o nome do arquivo de relatório
report_file="scripts/hmenu/result.txt"
# Lê o arquivo result.txt no subdiretório scripts/ hmenu /
while read line; do
# Extrai o ID, o texto e o status da linha
id=$(echo $line | awk '{print $1}')
text=$(echo $line | awk '{print $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9}')
status=$(echo $line | awk '{print $10}')
# Adiciona o item de checkbox ao menu
options+=("$id" "$text" "$status")
done < $report_file

# Exibe o menu em forma de checkbox
selected=$(dialog --backtitle "Selecione os itens desejados:" \
--checklist " " 20 60 15 \
"${options[@]}" \
--output-fd 1 \
--separate-output \
--scrollbar \
3>&1 1>&2 2>&3)

# Executa cada item selecionado
for item in $selected; do
if [ "$item" == "1" ]; then
echo "Executando o código para o Item 1..."
sed -i "/ $item/d" $report_file

fi
if [ "$item" == "2" ]; then
echo "Executando o código para o Item 2..."
sed -i "/ $item/d" $report_file
fi

done

Agradeço antecipadamente a ajuda!!!!

gohan123 boa noite.
Não entendi a necessidade do condicional .... (negritado acima)

Uma dica:
No arquivo: "scripts/hmenu/result.txt",
use um separador de campo diferente do espaço,
assim facilita as coisas.

Exemplo:
cat arq.txt
mouse:'Suporte a mouse':off
VGA:'Driver da placa de vídeo':off
Rede:'Driver da placa de rede':off

n=0;
while IFS=":" read -r c1 c2 c3;do
opt[$n]="$c1 $c2 $c3";
let n++;
done<arq.txt

----------------------------------------------------------------------------------------------------------------
resp=$(dialog --stdout --separate-output --title 'Seleção dos Componentes' --checklist 'O que você quer instalar?' 0 0 0 syntax 'Arquivos de sintaxe' off mouse 'Suporte a mouse' off color 'Suporte a cores' off beep 'Driver avançado de som' off VGA 'Driver da placa de vídeo' off Rede 'Driver da placa de rede' off)

printf "%s\n" $resp
Fonte:https://aurelio.net/shell/dialog/
PS.: Se postar o arquivo, facilita a ajuda.....

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Ajuda em bash script - Dialog [RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 13/02/2023 - 11:52h

{
"error": {
"message": "We could not parse the JSON body of your request. (HINT: This likely means you aren't using your HTTP library correctly. The OpenAI API expects a JSON payload, but what was sent was not valid JSON. If you have trouble figuring out how to fix this, please send an email to support@openai.com and include any relevant code you'd like help with.)",
"type": "invalid_request_error",
"param": null,
"code": null
}
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts