Husky预提交钩子跨Linux与Git Bash换行显示兼容问题
兼容Linux与Windows Git Bash的换行输出方案
方法1:使用printf替代echo -e(推荐)
printf的行为在不同POSIX兼容shell中更一致,能可靠解析转义字符(比如\n)。将你的代码替换为:
if [ ! -z "$MISSING" ]; then printf "%b" "$MISSING" false fi
%b格式符会自动解析字符串中的转义序列,不管是Linux原生shell还是Windows Git Bash,都能正确渲染换行符,无需额外参数。
方法2:检测echo兼容性并动态适配
如果坚持使用echo,可以先检测当前环境的echo是否支持-e参数,再切换调用逻辑:
# 定义兼容的echo函数 compatible_echo() { # 测试echo是否支持-e参数 if echo -e "\n" | grep -qE '^$'; then echo -e "$1" else echo "$1" fi } # 在逻辑中使用自定义函数 if [ ! -z "$MISSING" ]; then compatible_echo "$MISSING" false fi
通过测试echo -e "\n"能否输出空行,判断当前环境的echo是否支持转义解析,自动适配不同系统的行为。
方法3:强制调用bash内置echo
直接使用bash内置的echo实现(bash的echo默认支持-e),绕开系统默认的echo命令差异:
if [ ! -z "$MISSING" ]; then bash -c 'echo -e "$0"' "$MISSING" false fi
这种方式强制使用bash的内置命令,确保跨环境的转义解析一致性。
内容的提问来源于stack exchange,提问作者jcubic
相关产品推荐
相关产品推荐

