与“timeout”一起使用时,“read”内置函数会无限期挂起

与“timeout”一起使用时,“read”内置函数会无限期挂起

下面的脚本可以完美地与 或 配合使用bash,但不能与sudo bash或配合使用sh。按了enter还是^C不行。只能^\与 一起^Z工作,但不能与 一起工作sudo bash

printf '#!/bin/sh\nread var\n' > myscript
chmod +x myscript
sh -c "timeout -k 1 10 ./myscript"
# it does work when `bash` is used instead of `sh`

我知道我可以使用read -t 10. (这在以下版本中不可用sh并且可以使用仅有的如果我timeout无论如何都停止使用。)但我使用的原因timeoutread.我需要它来(其他东西)myscript。我不需要解决方法,而是需要对bash/事物的解释,并希望能找到和 的sudo bash解决方案。timeoutread

答案1

我还不知道为什么会这样,但这与不同的 shell 如何执行和处理信号有关。显然,看起来是这样的一些解决方案:

sh -c "timeout --foreground -k 1 5 ./myscript"

与以下相同sudo bash

sudo bash -c "timeout --foreground -k 1 5 ./myscript"

man timeout是不是这样解释的:

--foreground

       when not running timeout directly from a shell prompt,

       allow COMMAND to read from the TTY and get TTY signals; in  this
       mode, children of COMMAND will not be timed out

我不确定这一切意味着什么,也不知道后果是什么,但这也许对您或其他人会有所帮助。

相关内容