Redirecionar os resultados YAD para o arquivo E ainda dar códigos de saída dos botões para STDOUT

1

Eu tenho 2 botões personalizados no meu yad --form. Os resultados de entrada do usuário aka são redirecionados para um arquivo .txt para uso posterior. Isso está funcionando bem.

Mas parece que o código de saída não é mais dado ao STDOUT, quando estou redirecionando dessa maneira. Mas eu preciso do código de saída para decidir como seguir em frente, é claro.

Estou no caminho certo aqui? Existe outra solução que ainda entrega os códigos de saída para o STDOUT?

yad --title="egPorSS - TYPO3 Constants Setup" --center --borders="20" --width="500" --separator="\n" 2> /dev/null \
        --form \
        --field="egON API-Key":TEXT \
        --field="Host for AJAX-Requests":TEXT \
        --field="SOAP-Username":TEXT \
        --field="SOAP-Password":TEXT \
        --field="SOAP-URL:":TEXT \
        --field="SEPA-Service":CHK \
        --field="Base-Provider":CHK \
        --field="Digital Signature":CHK \
        --field="Company name":TEXT \
        --field="Street, Number":TEXT \
        --field="City":TEXT \ 
        --button="Discard entries":1 \
        --button="Write to DB":0 > ./temp/constants_modified.txt # Write entries to .txt file.

# if Button "Write to DB" is pressed, ask again, before manipulating DB
if [ $? -eq 0 ]; then
        yad --title="egPorSS - TYPO3 Constants Setup" --center --borders="20" 2> /dev/null \
            --text="Write changes to constants field in ${DB} now?" \
            --button="No, discard":0 \
            --button="Yes, write":1 
        # if "Yes, write" => modify ./temp/constants_${DB}.typoscript" and coll pushConstantsDB()
        if [ $? -eq 1 ]; then
            sed -i "s/plugin.tx_egon_pi1.system.apiKey.*/plugin.tx_egon_pi1.system.apiKey = ${modified[0]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.system.host.*/plugin.tx_egon_pi1.system.host = ${modified[1]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.soap.user.*/plugin.tx_egon_pi1.soap.user = ${modified[2]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.soap.password.*/plugin.tx_egon_pi1.soap.password = ${modified[3]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.soap.url.*/plugin.tx_egon_pi1.soap.url = ${modified[4]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.settings.useSEPA.*/plugin.tx_egon_pi1.settings.useSEPA = ${modified[5]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.settings.useBaseProvider.*/plugin.tx_egon_pi1.settings.useBaseProvider = ${modified[6]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.settings.signatureAllowed.*/plugin.tx_egon_pi1.settings.signatureAllowed = ${modified[7]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.custom.companyName.*/plugin.tx_egon_pi1.custom.companyName = ${modified[8]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.custom.companyStreet.*/plugin.tx_egon_pi1.custom.companyStreet = ${modified[9]}/" ${typoscript}
            sed -i "s/plugin.tx_egon_pi1.custom.companyCity.*/plugin.tx_egon_pi1.custom.companyCity = ${modified[10]}/" ${typoscript}
            echo -e "${LIBLUE}Writing changes to Database now.. ${NF}\n"
            pushConstantsDB
        else
            echo -e "${LIBLUE}Returning to main menu without any changes.. ${NF}"
            sleep 6     
        fi
    else
        echo -e "${LIBLUE}Returning to main menu without any changes.. ${NF}"
        sleep 6
    fi
    
por anarchist912 14.08.2018 / 17:11

1 resposta

0

Eu sei que esta é uma pergunta antiga, mas ninguém a respondeu e a solução é bastante simples.

O OP solicitou os resultados e códigos de saída do YAD. Se meu entendimento está correto, é necessário mostrar resultados em YAD como variáveis (arrays são mais fáceis) e presumo que por códigos de saída, códigos de retorno são significados. O código de retorno mostra qual botão foi pressionado, mas no post do OP não há nada para coletar os dados inseridos no formulário.

O que precisa ser feito é que os dados sejam salvos no formulário se o usuário clicar no botão "gravar no banco de dados", mas depois um segundo diálogo é exibido solicitando confirmação. Isso poderia ser feito com ou sem exibir os novos dados, mas faria sentido apresentá-lo novamente para verificação. Aqui está a minha solução:

#!/bin/bash
input=$(yad --title="egPorSS - TYPO3 Constants Setup" --center --borders="20" --width="500" --separator="\n" 2> /dev/null \
        --form \
        --field="egON API-Key":TEXT \
        --field="Host for AJAX-Requests":TEXT \
        --field="SOAP-Username":TEXT \
        --field="SOAP-Password":H \
        --field="SOAP-URL:":TEXT \
        --field="SEPA-Service":CHK \
        --field="Base-Provider":CHK \
        --field="Digital Signature":CHK \
        --field="Company name":TEXT \
        --field="Street, Number":TEXT \
        --field="City":TEXT \
        --button="gtk-cancel:1" \
        --button=" Update DB!iconok.png:2"  \
2>/dev/null
);return_code=$?

[[ "$return_code" -eq "2" ]] && { printf '%s\n' "${input[@]}"| yad --text-info --width="400" --height="400" --title="New Data" \
        --button="gtk-cancel:1" \
        --button=" Update DB!iconok.png:2" \
2>/dev/null
};return_code=$?
# See if "Update DB" was clicked
[[ "$return_code" -eq "2" ]] && echo "Update DB was clicked" || echo "Cancel was clicked"

A caixa de diálogo yad mostra os campos de dados necessários e a saída é salva em uma matriz chamada entrada. O código de retorno contém o valor da chave que foi pressionada; nesse caso, "1" mostra que cancel foi clicado, "2" é "Update DB". Eu adicionei uma verificação simples, que poderia ser manipulada para apresentar os dados em um formulário novamente, pré-preenchidos com os valores já inseridos, solicitando confirmação. Se confirmado, os dados no array "input" podem ser processados. Eu não entendo o que o OP está fazendo na segunda parte do roteiro dele.

Coisas extras que adicionei:

  • Os dados inseridos no campo "Senha SOAP" ficam ocultos para segurança fins.
  • No botão "Atualizar banco de dados", adicionei um ícone de seleção verde chamado iconok.png. Isso faz com que pareça melhor do que ficar em branco ao lado do botão Cancelar. Veja como fica:

Aquiestáasegundatela,mostrandoosdadosqueforaminseridos.Issopodeserprocessado,noentanto,énecessário.

    
por 16.10.2018 / 17:12