You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何多进程计算MD5的Bash脚本输出文件内容为空?

问题原因与解决办法

为什么变量值为空?

你给命令加&让它后台执行时,这个命令会在子进程里运行。Bash的子进程拥有独立的变量空间,完全无法修改父进程的变量——你用反引号捕获输出并赋值给md51/md52的操作,只在子进程内部生效,父进程里的这两个变量根本没被赋值,最后echo自然是空的。

正确的实现方式

可以用临时文件传递后台进程的计算结果,等所有后台任务完成后再读取结果写入目标文件:

#!/bin/bash

# 创建临时文件存储每个进程的MD5结果
tmp_md51=$(mktemp)
tmp_md52=$(mktemp)

# 后台执行MD5计算,将结果写入对应临时文件
md5sum -b ./source/test1.mp4 | cut -b 1-32 > "$tmp_md51" &
md5sum -b ./source/test2.mp4 | cut -b 1-32 > "$tmp_md52" &

# 等待所有后台进程完成
wait

# 从临时文件读取结果,写入目标文件
echo "md51=$(cat "$tmp_md51")" > ./test.txt
echo "md52=$(cat "$tmp_md52")" >> ./test.txt

# 清理临时文件
rm "$tmp_md51" "$tmp_md52"

这个方案里,后台进程把计算结果写入独立的临时文件,父进程等所有任务结束后再从文件里读取内容,就能正确获取到MD5值了。

内容的提问来源于stack exchange,提问作者TRANSISTOR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:50:37