我有一个脚本,可以在多个并行的存储库上运行git命令,这些存储库与gnu并行。我想通过grep传递git命令的输出并为某些部分着色,例如在git status上我希望单词“clean”显示为绿色。有没有办法用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 {}"
答案 0 :(得分:4)
尝试将此添加到管道的末尾:
| grep -E --color 'clean|word1|word2|$'
根据需要替换并添加或删除单词。 $
导致所有行匹配并通过。 --color
选项适用于GNU grep
。其他版本的grep
可能会使用其他选项。
或者,有several utilities可以进行着色。
一般提示:
$()
代替反引号 - 它们更具可读性和更多功能(例如嵌套)function
关键字GIT_ARGS
答案 1 :(得分:1)
要在使用并行时强制grep显示颜色,请尝试grep --color=always
答案 2 :(得分: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。