如何在npm脚本中执行bash脚本时保留文本颜色?
解决npm脚本中echo颜色转义序列失效的问题
原因
npm 默认会用 /bin/sh 执行脚本,部分系统的 sh 环境里,echo 默认不解析 \033 这类转义序列,导致颜色代码被当作普通文本输出。而直接在终端运行脚本时用的是 bash,bash 的 echo 会自动解析转义序列,所以颜色显示正常。
解决方法
方法1:给echo添加-e参数
修改脚本中的echo命令,加上-e参数让它解析转义序列:
echo -e "\033[1;31mACTION REQUIRED: \033[0m"
方法2:改用printf命令
printf 对转义序列的解析兼容性更好,几乎所有shell环境都支持,替换成:
printf "\033[1;31mACTION REQUIRED: \033[0m\n"
注意要手动添加\n实现换行,因为printf不像echo默认会自动换行。
方法3:强制npm用bash执行脚本
在package.json的脚本里明确指定用bash运行你的脚本,比如:
{ "scripts": { "your-script": "bash ./your-script-file.sh" } }
这样脚本会在bash环境下执行,和你直接在终端运行的行为一致,原echo代码无需修改。
内容的提问来源于stack exchange,提问作者mindparse
相关产品推荐
相关产品推荐

