我有这个小示例脚本:
for i in {1..100}; do
echo $i
sleep 0.1
done | whiptail --gauge "Doing something" 10 50 0
它正常工作,显示移动的进度条,并在达到 100 时退出。
使用相同的 for 循环而不将其管道化whiptail
,我可以使用Ctrl+停止它。但是,由于+在这里不起作用,C我如何以交互方式终止管道化到 whiptail 的进程?CtrlC
答案1
我尝试了whiptail的不同选项,似乎唯一的解决方案是针对每个百分比执行它。-Ctrl正在C工作。
需要更改TERM才能使其在中工作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
文本参数中执行
答案2
要退出该程序,您可以尝试以下步骤:
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”来退出。