相关疑难解决方法(0)

如何让 ctrl+c /not/ 中断 while 循环?

鉴于此循环:

while sleep 10s ; do
  something-that-runs-forever
done
Run Code Online (Sandbox Code Playgroud)

当我按 Ctrl+C 时,整个 while 循环被中断。我想要做的是中断“某事”过程,让 10 秒过去,然后重新启动“某事”。

如何让 ctrl+c 只影响“某事”,而不影响 while 循环?

编辑:“中断”如在 SIGINT 中。杀。中止。终止。不是“暂停”中的“中断”。

bash

13
推荐指数
1
解决办法
3051
查看次数

防止 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)

signals shell-script trap

3
推荐指数
1
解决办法
3605
查看次数

标签 统计

bash ×1

shell-script ×1

signals ×1

trap ×1