如何一起打印 GNU 并行命令和输出?

如何一起打印 GNU 并行命令和输出?

我只想使用诸如 之类的快速命令检查一堆 Git 存储库的状态parallel git -C {} status --short ::: ~/*/.git/..。但 Git 状态不包括存储库名称或路径,因此我需要某种方法来打印git运行的命令parallel或(理想情况下)仅打印输入(~/[…]/.git/..命令的一部分),然后打印与该存储库相关的输出。这可能吗?--verbose将打印该命令,但不会打印该命令旁边的命令输出,因此这还不够好。并且--group会将一项作业中的行保留在一起,但不会将这些行与 打印的命令保留在一起--verbose,因此这两个是不够的。

答案1

尝试:

parallel --tagstring {//} git -C {//} status --short ::: ~/*/.git

或者:

parallel --plus --tagstring {=s:$HOME.::';s:/.git::'=} git -C {//} status --short ::: ~/*/.git

或者:

parallel -v git -C {//} status --short ::: ~/*/.git

这并不完全是您所要求的,但可能是一个可以接受的解决方案。

符合您要求的解决方案是:

parallel "echo {};git -C {} status --short" ::: ~/*/.git/..

答案2

parallel --group --jobs=1 --verbose […]将打印命令,然后打印命令输出,然后继续执行下一个命令。缺点:

  • 它不会并行运行任何命令,因此它的速度与for循环一样慢。
  • 它打印完整的命令而不仅仅是输入。
  • --verbose在标准错误上打印命令,因此我必须 通过过滤器2>&1运行输出。less

相关内容