Функция диалога Bash не отображается

#bash #syntax #dialog

#bash #синтаксис #диалоговое окно

Вопрос:

итак, я пытаюсь показать свой диалоговый календарь с помощью функции, используя метод временного файла, но он не работает, вы можете мне помочь?

 #!/bin/bash
PROMPT=/tmp/prompt.sh.$
DISPLAY=/tmp/output.sh.$
trap "rm $DISPLAY; rm $PROMPT; exit" SIGHUP SIGINT SIGTERM

show_calendar()
{
    --clear --backtitle "backtitle" --title "title" --calendar 0 0 
    >$DISPLAY
    dialog <$DISPLAY
}
dialog --clear 
--backtitle "backtitle" 
--title "Menu:" 
--menu "Please choose" 15 50 2 
Calendar "Show calendar" 
Exit "Exit from shell" 2>"${PROMPT}"

select=$(<"${PROMPT}")

case $select in
    Calendar) show_calendar;;
    Exit) break;;
esac

done

[ -f $DISPLAY ] amp;amp; rm $DISPLAY
[ -f $PROMPT ] amp;amp; rm $PROMPT 
 

Спасибо

Комментарии:

1. Пожалуйста, вставьте ваш скрипт сначала в shellcheck.net и постарайтесь выполнить сделанные там рекомендации.

2. Что должна делать эта функция?

3. Предполагается, что функция отображает календарь, в котором вы можете выбрать дату и т. Д…

Ответ №1:

Сценарий сохраняет имя временного файла внутри переменной ‘DISPLAY’. Это плохой выбор, поскольку переменная DISPLAY обычно содержит строку подключения к X-дисплею.

Отложив вышеупомянутую проблему в сторону, код пытается вызвать программу ‘dialog’, используя стандартный ввод (dialog <$DISPLAY). К сожалению, диалоговое окно принимает только параметр командной строки. Кроме того, ‘—calendar’ принимает 3 параметра.

Рассмотрим вместо

 # No temporary file
dialog --clear --backtitle "backtitle" --title "title" --calendar 0 0
 

ИЛИ использование временного файла:

 TEMP_CMD=/tmp/output.sh.$
echo "" --clear --backtitle "backtitle" --title "title" --calendar 0 0 > $TEMP_CMD
dialog $(<$TEMP_CMD)