Отображение выбора файла Zenity

поэтому я пытаюсь выполнить функцию удаления внутри zenity. Мне удалось позволить пользователю ввести желаемый путь, а затем я хочу отобразить все файлы, которые присутствуют внутри него. Я узнал, как это сделать, и я знаю, что это работает, но не с zenity. Следующее окно (выбор файла) не появляется, и моя программа возвращается в меню. спасибо, вот мой код. Спасибо за вашу помощь и время!

#!/bin/bash

function Ddate()
{
    zenity --info \
    --title "Date and Time" \
    --text "Today is $(date)"
}

function Dcalendar()
{
    zenity --forms \
    --title "Scheduler" \
    --text "Pick a date" \
    --add-calendar "Calendar" \
    --add-entry "Reminder"
}

function Ddelete()
{   
    directory=$(zenity --entry \
    --text "Enter a path" \
    --title "Delete" )
    if [ -z "$directory" ];then
    directory=$ pwd
    else
        if [ -d "$directory" ];then
            zenity --file-selection --filename=$(directory)
        fi 
    fi

}

while true;
do
choice="$(zenity --height 275 --width 450 \
--list \
--title="" \
--column="Function" --column="Description" \
    Date 'Display the actual date and time.' \
    Calendar 'Display an interactive calendar.' \
    Delete 'Let you delete a file.' \
    Exit 'To quit this script.')"

case $choice in
    Date) Ddate;;
    Calendar) Dcalendar;;
    Delete) Ddelete;;
    Exit) break;;

esac

done

person Justin Mayer    schedule 19.01.2021    source источник


Ответы (1)


Чтобы решить мою проблему, я понимаю значение $? код выхода. В каждом окне $? управляйте кнопками «ОК» и «Отмена», принимая значения 0 и 1 соответственно. Внутри моей программы я очистил $? во-первых, из-за предыдущего окна значение может быть уже установлено, и установить переменную ret в $? это означает, что если кто-то нажмет «ОК» или отменит его, он перейдет к следующему окну или вернется к корневому окну.

function Ddelete()
{   
    directory=$(zenity --entry \
    --text "Enter a path" \
    --title "Delete" )
    if [ -z "$directory" ];then
    directory=$ pwd
    else
        if [ -d "$directory" ];then
            clear $?
            Spath=$(zenity --file-selection --filename=$(directory))
            ret=$?
        fi 
    fi

}
person Justin Mayer    schedule 06.03.2021