如何在 bash 函数中设置陷阱?

Che*_*eng 14 bash trap

我可以trap在 bash 脚本中进行设置,但不能在 bash 函数中进行设置。

比如source下面的代码并运行f,现在试试Ctrl+ C,没有被困住!

如何trap在bash函数中设置?

  4 trap ctrl_c INT
  5 
  6 ctrl_c () {
  7  echo "** Trapped CTRL-C"
  8 }
  9 
 10 
 11 f () {
 12   for i in `seq 1 100`; do
 13     sleep 1
 14     echo -n "."
 15   done
 16 } 
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 7

那是因为它将 SIGINT 发送到前台的进程而不是 to bash(正在运行脚本)。如果你想这样做,让函数异步然后使用wait(这将按预期运行并使用陷阱)。


har*_*kat 0

我认为你应该使该功能成为全球性的

#!/bin/bash
trap ctrl_c INT
ctrl_c () {
  echo "** Trapped CTRL-C"
} 
for i in `seq 1 100`; do
  sleep 1
  echo -n "."
done
Run Code Online (Sandbox Code Playgroud)