Перенаправить результаты YAD в файл И все же дать коды выхода из кнопок в STDOUT

У меня есть 2 пользовательских кнопки в моем yad –form. Вводимые пользователем результаты, или результаты, перенаправляются в файл .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 

One Solution collect form web for “Перенаправить результаты YAD в файл И все же дать коды выхода из кнопок в STDOUT”

Я знаю, что это старый вопрос, но никто не ответил на него, и решение действительно довольно простое.

ОП запросил результаты YAD и коды выхода. Если мое понимание правильное, необходимо показать результаты в YAD как переменные (массивы проще), и я предполагаю, что по кодам выхода подразумеваются коды возврата. Код возврата показывает, какая кнопка была нажата, но в сообщении ОП нет ничего для сбора данных, введенных в форму.

Необходимо сделать так, чтобы данные сохранялись из формы, если пользователь нажимает кнопку «запись в БД», но затем отображается второе диалоговое окно с запросом подтверждения. Это можно сделать с отображением новых данных или без них, но имеет смысл представить их снова для проверки. Вот мое решение:

 #!/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 отображаются обязательные поля данных, а выходные данные сохраняются в массиве, называемом input. Код возврата содержит значение нажатой клавиши, в этом случае «1» показывает, что кнопка «Отмена была нажата», «2» – «Обновить базу данных». Я добавил простую проверку, которой можно манипулировать, чтобы снова представить данные в форме, предварительно заполненной уже введенными значениями, запрашивая подтверждение. Если подтверждено, данные в массиве «input» могут быть обработаны. Я не понимаю, что делает ОП во второй части своего сценария.

Дополнительные вещи, которые я добавил:

  • Данные, введенные в поле «Пароль SOAP», скрыты в целях безопасности.
  • На кнопку «Обновить базу данных» я добавил зеленый значок проверки, называемый iconok.png. Это выглядит лучше, чем быть пустым рядом с кнопкой «Отмена». Вот как это выглядит:

ЯД форма

Вот второй экран, показывающий введенные данные. Это может быть обработано, однако требуется.

Данные из формы ЯД

Linux и Unix - лучшая ОС в мире.