У меня есть небольшой пример сценария:
for i in {1..100}; do
echo $i
sleep 0.1
done | whiptail --gauge "Doing something" 10 50 0
Он работает как надо, отображает движущийся индикатор выполнения и завершает работу, когда он достигает 100.
Используя тот же цикл for без привязки к whiptail
, я могу остановить его с помощью Ctrl kbd> + C kbd>. Но как я могу в интерактивном режиме прервать процессную трубу, чтобы выполнить биптейл, поскольку Ctrl kbd> + C kbd> здесь не работает?
У меня есть попытка другой optiuons с whiptail, и кажется, что единственное решение состоит в том, чтобы выполнить его для каждого процента. Ctrl-C работает.
Изменение ТЕРМИНА необходимо, чтобы заставить его работать в gnome-terminal
, то же для xterm (протестировал его), и вероятно другие терминалы
Протестированный в текстовой консоли (tty) - это уже имеет TERM=linux
whiptail
текст терминала восстановлений к тому же как перед выполнением, но блоками TERM=linux эта функция.
#!/usr/bin/env bash
for i in {1..100}; do
sleep 0.1
export TERM=linux
echo $i | whiptail --gauge "Doing something" 10 50 $i
done
Если необходимо произвести некоторую информацию о прогрессе, лучше, чтобы сделать это внутри whiptail
текстовые параметры
Для выхода из программы, можно попробовать что-то как следующее:
for i in {1..100}; do
echo $i
sleep 0.1
read -t 0.1 -N 1 input
if [[ $input == 'q' ]] || [[ $input == "Q" ]];then
break;
fi
done | whiptail --gauge "Doing something. press 'q' or 'Q' to exit" 10 50 0
Здесь сценарий будет ожидать ввода данных пользователем 'q' или 'Q' для выхода.