比较运行 Bash 之前和之后的进程列表



尝试比较运行测试的 bash 脚本之前和之后的进程列表。遇到麻烦,因为 ps 返回 1,我不确定当我有它们时如何比较之前和之后。

理想情况下,它看起来像这样。原谅粗糙的伪代码:

run-tests: 
ps -x
export before=$?
# run tests and scripts
ps -x 
export after=$?
# compare before and after

建议和建议表示赞赏。

我假设您想计算前后正在运行的进程数(您的问题对此不太清楚(。 如果是这样,你可以通过管道将 ps 连接到 wc:

export before=`ps --no-headers | wc -l`

--编辑---

我重读了这个问题,可能是您正在寻找不同的实际过程。 如果是这种情况,则可以捕获变量中的输出并比较它们:

target:
@ before=$$(ps --no-headers); 
run test; 
after=$$(ps --no-headers); 
echo "differing processes:"; 
comm -3 <(echo "$before") <(echo "$after")

关于这一点的一些快速说明:正如您提到的那样,我使用连接了所有行,您使用 makefiles,变量的范围只是定义它的配方行。 通过连接这些行,变量具有整个配方的范围。

我使用了双$$,因为您的原始帖子建议使用 makefile,并且 makefile$$将在要运行的 bash 代码中扩展到单个$

在 bash 中执行var=$(command)var分配command的输出

我使用了特定于 bash 的<()约定。 这使您可以将命令的输出视为文件,而无需实际创建文件。 请注意,我在变量周围加上了引号——这是必需的,否则 bash 在扩展变量时将忽略换行符。

最新更新