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

SVN:使用awk在命令行SVN上添加颜色(在bash中),svn,bash,awk,Svn,Bash,Awk,编辑:这是这段代码的最新版本,稳定 下面是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&qu

编辑:这是这段代码的最新版本,稳定


下面是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.";
  }';
}
这部分代码完全符合我的要求。svn功能(状态、更新等)以彩色打印。对于内部需求,我不想安装或之类的东西

下面是上面代码的一个示例:

再说一遍,这正是我想要的。当发现冲突时(例如,当我进行更新时),问题就会出现:事实上,当文件发生冲突时,svn会移交给用户,让用户键入几个字母(见下文)

有没有办法让awk让用户键入一些内容(例如,在VIm中打开冲突文件的e),执行一些操作(例如,在键入e后删除一些行,然后保存并退出),然后键入另一个字母确认解决冲突,最后显示svn更新的下一步(其他文件等)


换句话说,我想“暂停”显示颜色的脚本,让用户与svn交互,然后继续svn更新。我认为,了解如何让awk暂停调用方脚本,然后继续,这对将来非常有用

这里有一个简单而安全的解决方法(通过脚本测试)。因为svn只是简单地调用

system(getenv("SVN_EDITOR")) // or something similar
您只需执行以下操作(在bash中,针对其他shell进行调整):

export SVN_EDITOR=“&/dev/tty vi”
然后,您将能够进行编辑,并使您的配色方案不受awk的影响


我不知道它是否适用于其他编辑,但我希望它适用。应该给出的是标准重定向。

虽然没有特别回答您的问题,但我创建了一个稍微修改过的脚本版本,在运行
svn commit
时,我绕过了
awk
。此外,我还为某些类型的输出添加了更多颜色。该脚本可在线使用-请随时提交您的更改


您是否尝试运行
svn update--accept delay
,以便
svn
不会提示冲突?

您的
命令svn
仍会收到您的输入。有像
expect
这样的工具可以在自主执行和交互执行之间切换,但这可能有点离题。正确的解决方案是一个较低级别的包装器,我想就像你说的你不想使用的那些。您的awk脚本通过管道接收其输入,但您可能需要添加一种模式,在该模式下,它可以从
/dev/tty
或类似的地方读取额外的输入。是否要扩展bash函数
svn
,以处理所有这一切,或者您是否设想在
svn
功能运行后,所需的“暂停”作为单独的代码?顺便说一句,你的英语很好!祝你好运。@Sheller:嗯,我想扩展我的bash函数,这将是最好的。但我对所有可能的解决方案持开放态度;)为我的英语干杯@在测试脚本时,我注意到两件事。首先,缺少一些选项:X和U。其次,当我运行
svncommit
时,编辑器(在我的例子中是vim)会打开,但我无法以任何方式编辑提交。键盘输入最终会出现在其他地方。@JJD实际上,我没有添加X和U选项,因为我不需要它着色。但是,为什么
svn提交
openvim(它也是我的编辑器)?在我的例子中,
svn
在我进行导致冲突的更新时,请用户独家编写一些内容。我将在本周末进行一些测试,并告诉您发生了什么,谢谢!哇,我觉得有点受宠若惊!没关系,你可以加一些颜色。但正如我所说的,如果在svn更新过程中出现文件冲突,我认为您将遇到与我相同的问题:
在'offres.php'中发现冲突。选择:(p)推迟,(df)差异完全,(e)编辑,(h)帮助以获取更多选项:
我的设置不同。我正在并行使用一个
svn
存储库和一个
git
存储库。冲突只能通过git解决。每次我提交到
svn
时,我都不会有任何冲突。-我需要设置一些测试项目来重现您的冲突。无意冒犯!我使用你的剧本是出于自私的“颜色”原因。然而,我最早可以在三月份看到你的问题,因为我将在这期间休假。最后,4年多之后,我决定通过GitHub分享我的版本,就像你过去做的一样;)我已经做了很多改进,所以如果有人感兴趣,请看尼斯!谢谢分享尽管如此,我必须承认我现在正在使用Git,我会尽我所能抵制再次使用SVN。恕我冒犯。别担心,只有我们最老的项目仍然通过
svn
;)进行管理我们使用的
git
更多!伙计,这太完美了。不再提示冲突。。。所以我可以保留我的整个剧本!非常感谢,这很明显,但我没有发现!注意:为了避免所有SVN提示,最好使用
--non-interactive
选项(对于任何SVN子命令)。
system(getenv("SVN_EDITOR")) // or something similar
export SVN_EDITOR="</dev/tty >&/dev/tty vi"