我有一个 bash 脚本,如下所示:
some_process | sort -u | other_process >> some_file
我想在流数据时获取行数,在数据排序之后但在由 other_process 处理之前,我尝试了这样的操作:
some_process | sort -u | tee >(wc -l > $some_var_i_can_print_later) | other_process >> some_file
这对我不起作用,有什么方法可以在管道中传输数据时将计数存储在变量中吗?
另外,我想避免使用我需要担心清理的 tmpfiles
答案1
摆弄文件描述符可能会让你更进一步:
VAR=$(
exec 3>&1
some_process | sort -u | tee >(wc -l >&3) | other_process >> some_file
)
或者:
VAR=$({
some_process | sort -u | tee >(wc -l >&3) | other_process >> some_file
} 3>&1)
other_process
的输出被附加到some_file
,但wc -l
s 被重定向到 fd 3
,而 fd 又指向要分配给 VAR 的原始 stdout 。