通过键(如ENTER或ESC)在bash中创建中断
我需要知道是否可以使用ESC
或ENTER
键来打断bash脚本? 通过发送SIGINT /CTRL + C
我能够做到,但由于某些原因(请查看最后一行中的注释),我无法使用CTRL +C
所以我需要有一些自定义的方式来引起中断。
换句话说:在下面的脚本中,当CTRL + C
被按下时, cleanup
函数被调用。 现在需要修改此行为,以便在按下某些键(如ENTER
或ESC
)时应该调用cleanup
函数。
cleanup() {
#do cleanup and exit
echo "Cleaning up..."
exit;
}
echo "Please enter your input:"
read input
while true
do
echo "This is some other info MERGED with user input in loop + $input"
sleep 2;
echo "[Press CTRL C to exit...]"
trap 'cleanup' SIGINT
done
查询:
注意:
原因:该脚本是从另一个具有自己的陷阱处理的C ++程序调用的。 因此,该脚本的陷阱处理与父程序冲突,最终终端被挂起。 在我的组织中,程序的代码被冻结,所以我不能改变它的行为。 我只需要调整这个子脚本。
下面的工作^ M为ENTER和^ [为ESC但可能
stty intr ^M
stty intr ^[
但无法使用ENTER键恢复默认值后
stty intr ^C
在发表评论之后,由于shell是交互式的,所以要求继续使用陷阱,而且还可以在特殊的EXIT陷阱中进行清理。
如何在Linux shell脚本中提示是/否/取消输入?
或者使用select的另一个解决方案
echo "Do you want to continue?"
PS3="Your choice: "
select number in Y N;
do
case $REPLY in
"N")
echo "Exiting."
exit
;;
"Y")
break
;;
esac
done
# continue
这是一个肮脏的伎俩,正在做我的工作很好。 read
和case
说明选项是关键。 在这里,我正在read
命令超时,这样,除非esc
或enter
被按下,否则true继续。
cleanup() {
#do cleanup and exit
echo "Cleaning up..."
exit;
}
exitFunction()
{
echo "Exit function has been called..."
exit 0;
}
mainFunction()
{
while true
do
echo "This is some other info MERGED with user input in loop"
IFS=''
read -s -N 1 -t 2 -p "Press ESC TO EXIT or ENTER for cleanup" input
case $input in
$'x0a' ) cleanup; break;;
$'e' ) exitFunction;break;;
* ) main;break;;
esac
done
}
mainFunction
链接地址: http://www.djcxy.com/p/25559.html
上一篇: Create interrupt in bash by keys like ENTER Or ESC
下一篇: script sh : command wait an input from keyboard, but script type the input