如何通过Ctrl+C终止read命令且不执行后续代码、不关闭终端?
解决Ctrl+C中断read后脚本继续执行的问题
方法一:通过trap捕获INT信号直接退出脚本
修改后的代码如下:
trap 'exit 1' INT read -l -P "" number if test -z "$number" set number 2 end # do something e.g. echo "Processed" echo "Processed"
原理:按下Ctrl+C触发INT信号时,脚本执行exit 1直接终止,不会继续运行后续代码;这种退出方式仅终止脚本逻辑,不会关闭终端(即使脚本与终端PID一致)。
方法二:检查read命令的退出状态码
无需设置trap,直接通过$status(fish shell中获取上一条命令退出码)判断read是否被中断:
read -l -P "" number if test $status -ne 0 exit 1 end if test -z "$number" set number 2 end echo "Processed"
原理:Ctrl+C中断read时,其退出码不为0,此时执行exit 1终止脚本,避免后续代码执行。
内容的提问来源于stack exchange,提问作者ye xiang
相关产品推荐
相关产品推荐

