【问题标题】:Git - pre-commit hook error colorGit - 预提交钩子错误颜色
【发布时间】:2015-08-13 15:33:24
【问题描述】:

我的预提交挂钩压缩/编译 css/js 文件。当发生错误时,我只需使用echo 输出错误,然后使用exit 1。但是,写入控制台的文本是WHITE,因此在发生错误时不容易看到。

是否有另一种方法可以写入控制台(errOut?)以使文本 RED

【问题讨论】:

  • 将您的 pre-commit-hook 脚本添加到您的问题中。
  • 您只需要一个 3 行预提交挂钩,如下所示:#!/usr/bin/sh[NEXTLINE]>&2 echo "JS compression failed"[NEXTLINE]exit 1 其中 NEXTLINE 是一个新行

标签: git stdout stderr pre-commit-hook


【解决方案1】:

解决这个问题的最佳方法是为钩子输出着色而不是 PS1 提示,如下所示:

red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
no_color='\033[0m'

echo -e "\n${yellow}Executing pre-commit hook${no_color}\n"

... do your hook stuff ...

if [[ something bad happens ]]; then
    >&2 echo -e "\n${red}ERROR - Something BAD happened!\n${no_color}"
    exit 1
fi

echo -e "${green}Git hook was SUCCESSFUL!${no_color}\n"

注意:-e 必须与 echo 一起使用 - 它指定解释特殊字符,例如颜色和换行符。 (http://ss64.com/bash/echo.html)

【讨论】:

    【解决方案2】:

    自定义 bash 可能是个好主意,如下所示:

    0 ;) $ cat ~/.bashrc
    PS1="\[\033[01;37m\]\$? \$(if [[ \$? == 0 ]]; then echo \"\[\033[01;32m\];)\"; else echo \"\[\033[01;31m\];(\"; fi) $(if [[ ${EUID} == 0 ]]; then echo
     '\[\033[01;31m\]\h'; else echo '\[\033[01;32m\]\u@\h'; fi)\[\033[01;34m\] \w \$\[\033[00m\] "
    

    如果最后一个命令没有错误完成,它会显示一个绿色的快乐脸;如果最后一个命令没有错误,它会显示一个红色的悲伤脸;(如果它失败,例如:

    0 ;) $ cat 1.sh
    #!/bin/bash
    exit 1
    0 ;) $ ./1.sh
    1 ;( $ 
    0 ;( $ cat 1.sh
    #!/bin/bash
    exit 0
    0 ;) $ ./1.sh
    0 ;) $
    

    您可以根据需要自定义输出。

    示例取自here

    在行动:

    更新

    对于 Windows 的 Git 2.5,它应该是

    if ! \$?; then
      PS1="\[\e[1;32m\]Nice Work!\n\[\e[0;32m\]\u@\h \[\e[0;33m\]\w\[\e[0;37m\]\n\$ " 
    else
      PS1="\[\e[1;31m\]Something is wrong!\n\[\e[0;32m\]\u@\h \[\e[0;33m\]\w\[\e[0;37m\]\n\$ "
    fi 
    

    【讨论】:

    • 谢谢@zaratustra - 我正在努力理解你的例子。您可以编辑并添加对命令功能的解释吗?我的 shell 脚本非常有限。我不知道0 ;) $ cat 1.sh 做了什么。
    • cat 命令在屏幕上打印文件的内容。在这种情况下,1.sh 文件是一个 bash 脚本,在第一种情况下会以错误(exit 1)退出,在编辑后脚本成功完成(exit 0
    • 我可以在不创建新的 sh 脚本文件的情况下执行此操作吗?也许我需要做的就是写到stderr?我假设 echo 写入标准输出......我将如何写入标准错误?
    • 我试过>&2 echo "JS compression failed",但仍然打印为白色。
    • 如果您查看.bashrc,您可能会注意到它使用了$?,也就是上一个命令的退出代码。因此,如果您将输出定向到 stderr bash 不会像您期望的那样对 bash 进行着色。您需要在钩子中明确设置退出代码(exit 0exit 1
    猜你喜欢
    • 1970-01-01
    • 2013-12-15
    • 2015-08-23
    • 2019-07-12
    • 2015-01-13
    • 2018-05-21
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多