#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)