Программирование на Bash GUI: нет / неверно возвращаемое значение Zenity в скрипте bash - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь использовать zenity для получения ввода от пользователя в bash-скрипте.(Zenity - это набор инструментов для вещи, называемый bash) *

Вот моя попытка на данный момент

#!/bin/bash
if [[ true ]]
then
    # send a message to ask if data should be saved
    # do some form of copy to save the data
    zenity --question --title="Ramdisk Unmount" --timeout=0 --text="Save ramdisk contants to disk?" --ok-label="Yes" --cancel-label="No"
    rvar=$?
    #echo $rvar > /media/ramdisk/returnval
    if [[ $rvar == 0 ]]
    then
        DIR=$(zenity --file-selection --title="Ramdisk Unmount" --directory)
        CODE=$?
        echo $CODE
        echo $DIR
        case $CODE in
            0)
                echo "dir=$DIR"
                ;;
            1)
                echo "No directory selected"
                ;;
            -1)
                echo "An error occured"
                ;;
        esac
        echo $DIR
        echo $DIR > /media/ramdisk/dir
    else
        rm -rf /media/ramdisk/*
    fi    
    #umount /media/ramdisk
else
    false
fi
read -n1 -r -p "Press Enter to continue"

Примечание: версия zenity 3.22.0

Первые несколько строквключая первую команду zenity, кажется, работает, хотя странно, когда я пытался

rvar=`zenity --question --title="Ramdisk Unmount" --timeout=0 --text="Save ramdisk contants to disk?" --ok-label="Yes" --cancel-label="No"`

, это не работало, и

rvar=$(zenity --question --title="Ramdisk Unmount" --timeout=0 --text="Save ramdisk contants to disk?" --ok-label="Yes" --cancel-label="No")

также не работал должным образом,(В обоих случаях echo $rvar напечатал пустую строку.) Я думаю, что это может быть связано с проблемой, с которой я сталкиваюсь в данный момент, а именно ...

В настоящий момент сценарий bash, похоже, завершается послевторая команда zenity.Путь, выбранный в диалоговом окне zenity, печатается (как я полагаю) в stdout, однако дальше ничего не происходит, скрипт просто завершается и возвращается в терминал bash.

Код echo $CODE не печатается.

Ничего не напечатано echo $DIR.

Что может быть не так?

1 Ответ

0 голосов
/ 17 апреля 2019

При запуске zenity --question логический ответ отображается только через состояние выхода;таким образом, нет никакой причины собирать стандартный вывод.

Следующий Works For Me (tm) с Zenity 3.30.0:

if zenity --question --title="Ramdisk Unmount" --text="Save ramdisk contents to disk?"; then
  if dir=$(zenity --file-selection --title="Ramdisk Unmount" --directory); then
    echo "User requested unmount of the ramdisk at $dir" >&2
  else
    echo "User initially requested unmount but did not select a directory" >&2
  fi
else
  echo "User did not request unmount, or zenity failed" >&2
fi
...