我有一个小脚本,它着色编译器(maven)输出,所以错误不会被忽略。过程流在EOL之前
#!/bin/sh
export TEXT_YELLOW=`tput setaf 3`
export TEXT_RED=`tput setaf 1`
export RESET_FORMATTING=`tput sgr0`
mvn $* | sed \
-e "s/\(\[WARNING\].*\)/${TEXT_YELLOW}\1${RESET_FORMATTING}/g" \
-e "s/\(\[ERROR\].*\)/${TEXT_RED}\1${RESET_FORMATTING}/g"
问题是一个外壳内的外壳拥有我的编译器(mvn cli:execute-phase
)。在屏幕上应该可以看到类似maven2>
的命令提示符,然后用户可以输入命令。不幸的是,由于我的脚本,我只看到一个闪烁的光标。只有当我按下回车键时,maven2>
prompt-prefix-text弹出。
我的猜测是,sed正在等待EOL,然后在屏幕上打印某些东西。要解决它,我将不得不看看如果流开始字符串maven2>。如果是,则直接打印到终端,否则将其转发到sed。在bash中可能吗?
你不能关闭该功能,并seding输出后启动交互式会话? – choroba
不幸的是我不能。交互式会话由开发人员用来编译特定模块或触发自动化测试。那就是我需要着色的地方 –