我只想使用诸如 之类的快速命令检查一堆 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