鉴于此循环:
while sleep 10s ; do
something-that-runs-forever
done
Run Code Online (Sandbox Code Playgroud)
当我按 Ctrl+C 时,整个 while 循环被中断。我想要做的是中断“某事”过程,让 10 秒过去,然后重新启动“某事”。
如何让 ctrl+c 只影响“某事”,而不影响 while 循环?
编辑:“中断”如在 SIGINT 中。杀。中止。终止。不是“暂停”中的“中断”。
考虑以下脚本:
#!/bin/bash
set -o pipefail
set -o history
trapper() {
func="$1" ; shift
for sig ; do
trap "$func $sig" "$sig"
done
}
err_handler () {
case $2 in
INT)
stop_received=1
;;
TSTP)
;;
ERR)
if [[ $2 != "INT" ]]; then # for some reason, ERR gets triggered on SIGINT
code=$?
if [ $code -ne 0 ]; then
echo "Failed on line $1"
echo "$BASH_COMMAND returned $?"
echo "Content of variables at the time of failure:"
echo "$(set -o …Run Code Online (Sandbox Code Playgroud)