下面的脚本可以完美地与 或 配合使用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
无论如何都停止使用。)但我使用的原因timeout
与read
.我需要它来(其他东西)myscript
。我不需要解决方法,而是需要对bash
/事物的解释,并希望能找到和 的sudo bash
解决方案。timeout
read
答案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
我不确定这一切意味着什么,也不知道后果是什么,但这也许对您或其他人会有所帮助。