SVN:使用awk在命令行svn中添加颜色(在bash中)

4wk*_*wk_ 7 svn bash awk

编辑:这是这个片段的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函数(状态,更新等)用颜色打印.对于内部需求,我不想安装诸如colorsvnsvn-color之类的东西.

以下是上面代码的示例:(没有声望发布图片)

svn命令以颜色显示

而且,这完全是我想要的.发现冲突时会出现问题(例如,当我进行更新时):实际上,当文件发生冲突时,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暂停调用者脚本,然后恢复将是非常有用的!

Ged*_*dge 3

您是否尝试运行svn update --accept postpone以免svn提示冲突?