YAD 결과를 파일로 리디렉션하고 버튼에서 STDOUT으로의 종료 코드를 계속 제공합니다.

YAD 결과를 파일로 리디렉션하고 버튼에서 STDOUT으로의 종료 코드를 계속 제공합니다.

내 yad --form에는 2개의 사용자 정의 버튼이 있습니다. 사용자 입력(일명 결과)은 나중에 사용할 수 있도록 .txt 파일로 리디렉션됩니다. 그것은 잘 작동합니다.

그런데 이런 식으로 리디렉션을 하면 종료 코드가 더 이상 STDOUT에 제공되지 않는 것 같습니다. 하지만 물론 진행 방법을 결정하려면 종료 코드가 필요합니다.

나는 올바른 길을 가고 있습니까? 종료 코드를 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

답변1

나는 이것이 오래된 질문이라는 것을 알고 있지만 아무도 대답하지 않았으며 해결책은 정말 간단합니다.

OP는 YAD 결과와 종료 코드를 요청했습니다. 내 이해가 정확하다면 결과를 YAD의 변수로 표시해야 하며(배열이 더 쉬움) 종료 코드가 반환 코드를 의미한다고 가정합니다. 반환 코드는 어떤 버튼을 눌렀는지 표시하지만 OP 게시물에는 양식에 입력된 데이터를 수집하는 내용이 없습니다.

수행해야 할 작업은 사용자가 "데이터베이스에 쓰기" 버튼을 클릭하면 데이터가 양식에서 저장되지만 확인을 요청하는 두 번째 대화 상자가 표시된다는 것입니다. 이는 새 데이터를 표시하거나 표시하지 않고 수행할 수 있지만 검사를 위해 다시 표시하는 것이 합리적입니다. 이것이 내 해결책입니다.

#!/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"

yad 대화 상자에는 필요한 데이터 필드가 표시되고 출력은 입력이라는 배열에 저장됩니다. 반환 코드는 누른 키의 값을 보유합니다. 이 경우 "1"은 "취소"를 클릭했음을 의미하고 "2"는 "데이터베이스 업데이트"를 의미합니다. 데이터를 양식에 다시 표시하고 입력된 값을 미리 채우고 확인을 요청하도록 조작할 수 있는 간단한 검사를 추가했습니다. 확인되면 "입력" 배열의 데이터를 처리할 수 있습니다. OP가 스크립트의 두 번째 부분에서 무엇을 하는지 이해가 되지 않습니다.

내가 추가한 추가사항:

  • 보안을 위해 SOAP 비밀번호 필드에 입력한 데이터는 숨겨집니다.
  • "데이터베이스 업데이트" 버튼에 iconok.png라는 녹색 확인 아이콘을 추가했습니다. 이렇게 하면 "취소" 버튼 옆의 공백보다 더 보기 좋습니다. 다음과 같습니다.

야데 형식

입력된 데이터를 보여주는 두 번째 화면입니다. 하지만 필요한 경우 처리될 수 있습니다.

YAD 테이블의 데이터

관련 정보