如何使用 Ctrl+C 停止整个脚本而不仅仅是当前命令
How to use Ctrl+C to stop whole script not just current command
我有一个脚本如下:
for ((i=0; i < $srccount; i++)); do
echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\""
echo -e $'Press any key to continue or Ctrl+C to exit...\n'
read -rs -n1
rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]}
done
如果我按 Ctrl+C 响应读取命令,整个脚本将停止,但如果按 Ctrl+C 而 rsync
命令是 运行,只是当前的 rsync
命令将停止,脚本将继续 for循环。
如果用户按下 Ctrl+C 而 rsync
是 [=33],有什么方法可以告诉脚本=],停止 rsync
并退出脚本本身?
Ctrl+C发送中断信号,SIGINT
。你需要告诉 bash 在收到这个信号时退出,通过 trap
内置:
trap "exit" INT
for ((i=0; i < $srccount; i++)); do
echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\""
echo -e $'Press any key to continue or Ctrl+C to exit...\n'
read -rs -n1
rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]}
done
您可以做的不仅仅是收到信号后退出。通常,信号处理程序会删除临时文件。详情请参阅 bash documentation。
只需按 Ctrl + Z。它会完全停止你的脚本。
我有一个脚本如下:
for ((i=0; i < $srccount; i++)); do
echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\""
echo -e $'Press any key to continue or Ctrl+C to exit...\n'
read -rs -n1
rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]}
done
如果我按 Ctrl+C 响应读取命令,整个脚本将停止,但如果按 Ctrl+C 而 rsync
命令是 运行,只是当前的 rsync
命令将停止,脚本将继续 for循环。
如果用户按下 Ctrl+C 而 rsync
是 [=33],有什么方法可以告诉脚本=],停止 rsync
并退出脚本本身?
Ctrl+C发送中断信号,SIGINT
。你需要告诉 bash 在收到这个信号时退出,通过 trap
内置:
trap "exit" INT
for ((i=0; i < $srccount; i++)); do
echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\""
echo -e $'Press any key to continue or Ctrl+C to exit...\n'
read -rs -n1
rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]}
done
您可以做的不仅仅是收到信号后退出。通常,信号处理程序会删除临时文件。详情请参阅 bash documentation。
只需按 Ctrl + Z。它会完全停止你的脚本。