如何让xargs执行命令的stdout和stderr合并为单行,与输入行数匹配?
解决Python虚拟环境符号链接版本查询的单行输出问题
问题根源在于损坏的链接或glibc版本不兼容时,错误输出会产生多行内容,导致每个符号链接对应多行输出,打破了输入输出行数的一致性。要实现每个链接对应一行输出,核心是把每个链接的所有输出(标准输出+标准错误)合并为单行。
以下是几种可行的命令方案:
方案一:利用Bash参数替换合并换行
# 替换成你的符号链接列表生成命令(比如find) find /your/link/dir -type l | xargs -I {} sh -c ' # 捕获该链接执行--version的全部输出 output=$({} --version 2>&1) # 将输出中的换行替换为空格,输出单行内容 echo "${output//$'\n'/ }" ' | tee output.txt
方案二:用tr命令替换换行符
find /your/link/dir -type l | xargs -I {} sh -c ' # 将所有输出的换行换成空格,最后补一个换行确保单行结束 {} --version 2>&1 | tr "\n" " "; echo ' | tee output.txt
方案三:添加链接路径前缀(更易读)
如果需要在每行开头标注对应的符号链接路径,方便定位问题,可以用这个版本:
find /your/link/dir -type l | xargs -I {} sh -c ' echo -n "{}: " {} --version 2>&1 | tr "\n" " " echo ' | tee output.txt
这些方案的核心逻辑都是将单个符号链接产生的多行输出(无论正常版本信息还是错误提示)合并为单行,确保输出行数和输入的符号链接数量完全一致。
内容的提问来源于stack exchange,提问作者OldManWaterfall
相关产品推荐
相关产品推荐

