--tailbox
и --progressbox
хорошо справляются с этим, за исключением того, что если вывод становится слишком большим, вы можете видеть только то, что соответствует размеру экрана.
Это не совсем правильно. --tailbox
позволяет вам прокручивать влево и вправо. Но это не позволяет вам прокручивать вверх и вниз, что очень жаль.
Чтобы обойти это, вы можете предоставить --tailbox
с --extra-button
которая вызывает, например, --textbox
. (Тогда кнопка «Выход» становится кнопкой «ОК», поэтому вы должны использовать --ok-label
если хотите изменить заголовок.)
Закрытие --textbox
может либо прерваться, либо вернуться в --tailbox
. Далее он возвращается к --tailbox
:
(
log=/tmp/make-kernel.log
# start process that writes to "$log" here
exit_status=1
while [ $exit_status -ne 0 ]
do
dialog \
--ok-label Close \
--extra-button --extra-label Inspect \
--tailbox "$log" 21 80
exit_status=$?
if [ $exit_status -eq 255 ]; then
dialog --textbox "$log" 21 80
fi
done
)
Редактировать: я нашел пример, который намеревается сделать это, но я, честно говоря, не понимаю, как это работает или как его перевести на пример find / -name "a*"
. см. последний пример на http://mywiki.wooledge.org/BashFAQ/040
Большое спасибо за ссылку на этот пример. Наконец, я понимаю, как --tailboxbg
должен работать.
Однако, в отличие от моего подхода, этот пример «как есть» не позволил бы вам прокручивать выходные данные (и при этом не претендует на это). Кроме того, здесь (диалог 1.3-20160828), кнопка не отображается в --tailbox
, что для сравнения не является удобным для пользователя.
Как это работает, так:
# POSIX
# you cannot tail a nonexistent file, so always ensure it pre-exists!
> dialog-tail.log
«Создайте пустой файл dialog-tail.log
чтобы в приведенном ниже dialog
отображался файл, даже если в него еще ничего не записано».
{
for i in 1 2 3; do
printf '%d\n' "$i"
sleep 1
done
printf 'Done\n'
} > dialog-tail.log &
«Запишите числа от 1 до 3 в файл dialog-tail.log
, каждое в отдельной строке (\n
), одно число в секунду (sleep 1
), и сделайте это в фоновом режиме (&
)».
В вашем случае вы бы заменили { … }
на find / -name 'a*'
. Вы также можете перенаправить стандартный поток ошибок find
.
dialog --title "TAIL BOXES" \
--begin 10 10 --tailboxbg dialog-tail.log 8 58 \
--and-widget \
--begin 3 10 --msgbox "Press OK " 5 30
«Отобразите файл в поле в строке 10, столбце 10, с заголовком« TAIL BOXES », как будто tail
(1), но запустите это поле в фоновом режиме (--tailboxbg
вместо --tailbox
), чтобы получить дополнительный Виджет (--and-widget
) может быть немедленно отображен, начиная со строки 3, столбца 10 (--begin 3 10
; над хвостовой рамкой). Этот виджет представляет собой --msgbox
с текстом «Нажмите OK», высотой 5 и шириной 30 дюймов ».
wait
«Не выполняйте следующие команды, пока не завершатся все дочерние процессы в фоновом режиме (здесь: процесс, который пишет в файл, и dialog
)». (RTFM, соответственно)