在捕获中断后如何使Bash的读取中止?

Wil*_*ell 8 bash signals

考虑:

$ cat b.sh
#!/bin/bash

trap 'echo $$ was interrupted' INT
read foo
echo done
$ ./b.sh
^C27104 was interrupted
^C27104 was interrupted
^C27104 was interrupted
done
$ 
Run Code Online (Sandbox Code Playgroud)

(ctrl-c被击中3次,然后是ctrl-d)

我想read在执行陷阱后中止.有没有一种干净的方法来实现这一目标?

ran*_*mir 9

好像不会立即中断是一个bash非POSIX扩展(见read_builtinread.def的Bash内建源(寻找posixly_correct)).

您可以覆盖此行为,并Ctrl+C通过强制POSIX行为read(通过设置POSIXLY_CORRECT环境变量)退出第一个行为:

#!/bin/bash
trap 'echo $$ was interrupted' INT
POSIXLY_CORRECT=1 read foo
echo done
Run Code Online (Sandbox Code Playgroud)

  • 每天都在学习新东西 - 这实际上是一个完美的答案.+++ :) (4认同)
  • @ jm666,谢谢.我只是偷看了源头,发现了这一点.:) (2认同)