尝试比较运行测试的 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 在扩展变量时将忽略换行符。