【发布时间】:2018-04-17 16:20:43
【问题描述】:
我在看https://stackoverflow.com/a/10225050/1737158
在同一个问题中,timeout 命令有一个答案,但不是在所有操作系统中,所以我想避免它。
我尝试做的是:
demo="$(top)" &
TASK_PID=$!
sleep 3
echo "TASK_PID: $TASK_PID"
echo "demo: $demo"
我希望 $demo 变量中没有任何内容,而 top 命令永远不会结束。
现在我得到一个空结果。这是“可接受的”,但是当我对应该返回值的命令重新使用相同的东西时,我仍然得到一个空的结果,这是不行的。例如:
demo="$(uptime)" &
TASK_PID=$!
sleep 3
echo "TASK_PID: $TASK_PID"
echo "demo: $demo"
这应该返回正常运行时间结果,但事实并非如此。我也试图通过 TASK_PID 杀死进程,但我总是得到。如果命令失败,我希望以某种方式捕获 stderr。它可以在不同的变量中,但必须被捕获并且不能泄露出去。
【问题讨论】:
-
如果
bash可以在系统上编译,那么timeout也可以编译。 -
这里的问题是整条生产线都是作为后台进程运行的。您运行一个分配变量 demo 的 shell。然后 shell 结束并且 demo 变量丢失了(它之前已经丢失了,因为只对这个分叉的 shell 可用)。输出很容易提示:
[1]+ Done demo="$(uptime)"
标签: bash cross-platform