控制回车git输出

上下文我制作了一个简单的函数,在每个子目录中执行一个git pull

 function gprall() { for d in */; do [ -d "$d/.git" ] && (cd $d; echo -n "$(pwd) : "; git pull ; cd ..); done } 

它工作得很好,脚本的输出是这样的:

 /Users/bric3/oss/mockito : Rebasing (1/1) Successfully rebased and updated refs/heads/master. /Users/bric3/oss/grpc-demos : Rebasing (1/1) Successfully rebased and updated refs/heads/master. ... 

然后在git 2.12或2.13的发布周围输出变成:

 Successfully rebased and updated refs/heads/master./1) Successfully rebased and updated refs/heads/master. (1/1) Successfully rebased and updated refs/heads/master. Successfully rebased and updated refs/heads/master.g (1/1) Successfully rebased and updated refs/heads/master.ng (1/1) ... 

我不知道发生了什么,但怀疑有些进度条像打印回车。

我尝试了下面的选项--quiet--progress来看看我能不能做些什么,但是它不会改变行为,也就是说,git的输出正在消除我行的开始。

我试图用echo来包装git命令

 for d in */; do [ -d "$d/.git" ] && (cd $d; echo -n "$(pwd) : "; echo $(git pull) ; cd ..); done 

这确实更好

 /Users/bric3/oss/mockito : Successfully rebased and updated refs/heads/master. Rebasing (1/1) /Users/bric3/oss/grpc-demos : Successfully rebased and updated refs/heads/master. Applied autostash. Rebasing (1/1) ... 

有消息Successfully...被打印之前,探索networking和git之后,我发现这行被打印在stderr ,这就解释了为什么它打印之前Rebasing

我知道我可以通过在第一个回声中删除-n来find一个简单的解决方法。 但是我想知道如果我想用我想要的东西(这里是回购path)在第一行加前缀,我的select是什么:

 /Users/bric3/oss/mockito : Successfully rebased and updated refs/heads/master. /Users/bric3/oss/grpc-demos : Successfully rebased and updated refs/heads/master. Applied autostash. ... 

所以如果可能的话前面加上一行,如果git还有其他的东西要说,可以加上一行。

所以这个想法大声地说 ,应该是程序应该为每个git回购(我想在terminal上看到)做:

  1. 回声的path

     /path/to/repo : 
  2. 运行git

    1. 在标准输出Rebasing

       /path/to/repo : Rebasing 
    2. git输出回车

       /path/to/repo : 
    3. git在stderr上输出进度信息:

       /path/to/repo : Successfully rebased... 
    4. 如果有其他信息可用,git会添加新行

       /path/to/repo : Successfully rebased... Applied autostash. 

简单和优雅的方式可能吗?