我试图编写一个在后台空闲等待信号的 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/sh
BusyBox ash 运行,发送 SIGUSR1 也会导致程序终止:
$ ./test
signal
signal
...
Run Code Online (Sandbox Code Playgroud)
$ ./test
signal
$
Run Code Online (Sandbox Code Playgroud)
不应该read
只在从标准输入读取 EOF 或 IFS 后返回吗?在这种情况下,这并没有发生,那么是什么导致了它的返回呢?