编辑:这是这个片段的Github更新版本,稳定.
这是Bash代码的一部分(我把它放在.bashrc文件中),它有效:
function svn {
command svn "$@" | awk '
BEGIN {
cpt_c=0;
}
{
if ($1=="C") {
cpt_c=cpt_c+1;
print "\033[31m" $0 "\033[00m"; # Conflicts are displayed in red
}
else if ($1=="A") {
print "\033[32m" $0 "\033[00m"; # Add in green
}
else if ($1=="?") {
print "\033[36m" $0 "\033[00m"; # New in cyan
}
else if ($1=="D") {
print "\033[35m" $0 "\033[00m"; # Delete in magenta
}
else {
print $0; # No color, just print the line
}
}
END {
print cpt_c, " conflicts are found.";
}';
}
Run Code Online (Sandbox Code Playgroud)
这部分代码完全符合我的要求.svn函数(状态,更新等)用颜色打印.对于内部需求,我不想安装诸如colorsvn或svn-color之类的东西.
以下是上面代码的示例:(没有声望发布图片)

而且,这完全是我想要的.发现冲突时会出现问题(例如,当我进行更新时):实际上,当文件发生冲突时,svn会被移交给用户,让他输入几个字母(见下文)
# svn update
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
Run Code Online (Sandbox Code Playgroud)
有没有办法让awk让用户键入一些内容(例如e,在VIm中打开冲突的文件),做一些事情(例如在类型e之后删除一些行,然后保存并退出),然后键入另一个字母以确认解决冲突,然后最后显示svn update的下一步(其他文件等)?
换句话说,我想"暂停"显示颜色的脚本让用户与svn交互,然后svn update继续.我想对于将来如何让awk暂停调用者脚本,然后恢复将是非常有用的!