小编yva*_*vay的帖子

为什么发送捕获信号会导致“read”在 POSIX shell 中返回,但在 Bash 中不会返回?

我试图编写一个在后台空闲等待信号的 shell 脚本。由于脚本不接受用户输入,我想read在等待时无限期地阻止脚本。

在 bash 中,以下代码似乎按预期工作,每次收到 SIGUSR1 时都会输出“信号”:

#!/bin/bash
trap "echo signal" SIGUSR1
read
Run Code Online (Sandbox Code Playgroud)
$ ./test
signal
signal
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用#!/bin/shBusyBox ash 运行,发送 SIGUSR1 也会导致程序终止:

$ ./test
signal
signal
...
Run Code Online (Sandbox Code Playgroud)
$ ./test
signal
$
Run Code Online (Sandbox Code Playgroud)

不应该read只在从标准输入读取 EOF 或 IFS 后返回吗?在这种情况下,这并没有发生,那么是什么导致了它的返回呢?

bash signals shell-script read

5
推荐指数
1
解决办法
557
查看次数

标签 统计

bash ×1

read ×1

shell-script ×1

signals ×1