我的pre-commit钩子压缩/编译css/js文件。当发生错误时,我只需使用echo
输出错误,然后使用exit 1
退出。但是,写入控制台的文本是白色,所以很难看到错误发生。
是否有另一种方式可以写入控制台(errOut?),使文本变为红色?
我的pre-commit钩子压缩/编译css/js文件。当发生错误时,我只需使用echo
输出错误,然后使用exit 1
退出。但是,写入控制台的文本是白色,所以很难看到错误发生。
是否有另一种方式可以写入控制台(errOut?),使文本变为红色?
最好的方法是给你的钩子输出上色,而不是像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"
注意:使用echo
时,需要结合-e
选项以解释特殊字符,例如颜色和换行符。 (http://ss64.com/bash/echo.html)
可能定制您的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 ;) $
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
exit 1
吗? - Redtopiaif ! \$?; then
PS1="\[\e[1;32m\]干得好!\n\[\e[0;32m\]\u@\h \[\e[0;33m\]\w\[\e[0;37m\]\n\$ "
else
PS1="\[\e[1;31m\]该死!\n\[\e[0;32m\]\u@\h \[\e[0;33m\]\w\[\e[0;37m\]\n\$ "
fi
- Redtopiaif ! \$?; then
总是返回 true,所以提示总是绿色的。我尝试了几种方法来测试是否发生错误,但是我无法弄清楚。 - Redtopia
#!/usr/bin/sh[NEXTLINE]>&2 echo "JS 压缩失败"[NEXTLINE]exit 1
,其中 NEXTLINE 是一个新行。 - Redtopia