Bash 脚本不是用 Ctrl+C 终止的

Bash 脚本不是用 Ctrl+C 终止的

Ctrl我的脚本无法用+键终止C。这是一个错误。

请解释如何修改我的脚本以使其可由Ctrl+终止C

#!/bin/bash

while true; do
  paplay /usr/share/sounds/phone.wav
done

答案1

如果你在父 shell 中捕获 SIGINT 并退出 shell,它也会关闭 paplay:

trap exit SIGINT;
while true; do paplay  /usr/share/sounds/phone.wav ; done

它看起来像paplay阻止 INT 信号并影响阻止父 shell 运行其默认处理程序。

在父 shell 中安装处理程序并在其中重置处理程序并重新引发信号可能会以更好的方式解决该问题:

trap 'trap - SIGINT; kill -SIGINT $$' SIGINT; 
while :; do paplay  /usr/share/sounds/linuxmint-login.wav ; done 

(使用这种exit方法时,启动程序进程认为它的子进程自动退出,而使用第二种方法时,脚本看起来像是被杀死了SIGINT)。

答案2

问题实际上是关于paplay,它可能会阻塞信号,或者(如拱门维基),可能只是太忙了。

sleep 1您可以通过在循环中放入 a 来使脚本更容易停止。

相关内容