4

我有一个脚本,可以在多个存储库上并行运行 git 命令,这些存储库是 gnu 并行的。我想通过 grep 传递 git 命令的输出并对某些部分进行着色,例如在 git status 上,我希望“干净”这个词显示为绿色。有没有办法用 gnu parallel 和 grep 做到这一点?

到目前为止,这是我的脚本:

#!/bin/bash

START_DIR=`pwd`
export GIT_ARGS=$*
function do_git() {
    PROJECT_DIR=`dirname $1`
        cd $PROJECT_DIR
    echo ""
        pwd
        git $GIT_ARGS
        echo ""
        cd $START_DIR
}

export -f do_git

find . -maxdepth 2 -type d -name ".git" | sort | parallel --max-procs 4 "do_git {}"
4

3 回答 3

4

尝试将其添加到管道的末尾:

| grep -E --color 'clean|word1|word2|$'

根据需要替换和添加或删除单词。$导致所有行匹配并通过。该--color选项适用于 GNU grep。其他版本grep可能使用不同的选项。

或者,有几个实用程序可以进行着色。

一般提示:

  • 避免使用全部大写的变量名,以防止与 shell 变量的名称冲突
  • 使用$()而不是反引号 - 它们更具可读性和更多功能(例如嵌套)
  • 不需要使用function关键字
  • 请参阅BashFAQ/028关于尝试使用脚本的位置
  • 我认为GIT_ARGS不需要导出
于 2013-08-29T15:05:51.427 回答
2

要在使用并行时强制 grep 显示颜色,请尝试grep --color=always

于 2014-02-04T07:10:07.210 回答
0

我会看看我是否可以就显示颜色提出一个好的建议。

同时我认为你可以像这样改进你的脚本:

#!/bin/bash

function do_git {
    PROJECT_DIR=${1%.git}
    cd "$PROJECT_DIR"
    echo
    pwd
    git "${@:2}"
    echo
}

export -f do_git

find . -maxdepth 2 -type d -name '.git' | sort | parallel --max-procs 4 do_git '{}' "$@"

您不必用 cd "$START_DIR" 改回来,因为它在子 shell 中运行(可能是并行的)并且不会影响调用 shell。

于 2013-08-29T18:14:19.140 回答