我正在使用 bash 脚本。启动脚本时,如何突出显示输出中的特定行?例如,所有带有“Enable”的行应为绿色,所有带有“Disable”的行应为红色,所有其他行应为黄色。如下所示:
当我运行它时,我使用:
YELLOW="\e[33m"
GREEN="\e[92m"
RED="\e[31m"
printf "${YELLOW}"
./config.sh --enable 1 2 3 4 5 --disable 6 7 8 9
这样,输出就是黄色。这样就没问题了,但是如何在启用和禁用行上使用不同的颜色呢?
输出如下所示:
Enable 1
Enable 2
Enable 3
Enable 4
Enable 5
Disable 6
Disable 7
Disable 8
Disable 9
aaaaaaaaaaa
bbbbbbbbbbb
ccccccccccc
ddddddddddd
然后,在所有带有启用的行变为绿色并且禁用的行变为红色之后,从aaaaaaaaa
启用开始,之后的所有内容都应为默认的黄色。我该怎么做?
答案1
如果你坚持,printf
你可以这样做:
highlight() {
YELLOW="\e[;33m"
GREEN="\e[;92m"
RED="\e[;31m"
while read -r; do
case "$REPLY" in
*Enable*)
printf "$GREEN%s$YELLOW\n" "$REPLY"
;;
*Disable*)
printf "$RED%s$YELLOW\n" "$REPLY"
;;
\[????\]*)
printf "$YELLOW%s\e[m%s\n" "${REPLY:0:6}" "${REPLY:6}"
;;
*)
printf "$YELLOW%s\n" "$REPLY"
;;
esac
printf "$YELLOW"
done
}
# ./config.sh --enable 1 2 3 4 5 --disable 6 7 8 9 |& highlight
highlight < <(setsid ./config.sh --enable 1 2 3 4 5 --disable 6 7 8 9 2>&1 </dev/null)
export CLICOLOR=0
highlight < <(setsid cmake --build ./path/to/build 2>&1 </dev/null)
这只是读取每一行并在打印之前添加正确的颜色。它|&
还会捕获 stderr。@rusty 的回答会更通用,但它使用 sed。重置、末尾$YELLOW
和是setsid
针对脚本中某些奇怪行为的许多解决方法./config.sh
。
答案2
它适用于百分比,但其他任何东西都是灰色的。但根据您的建议,我已设法使其适用于 cmake:
highlight() {
YELLOW="\e[;93m"
GREEN1="\e[;32m"
GREEN2="\e[;92m"
MAGENTA="\e[;95m"
STOP="\e[0m"
while read -r; do
case "$REPLY" in
*NEON*)
printf "$GREEN2%s$YELLOW\n" "$REPLY"
;;
*Scanning*)
printf "$MAGENTA%s$YELLOW\n" "$REPLY"
;;
\[????\]*Building*)
printf "$YELLOW%s\e[$GREEN1%s\n" "${REPLY:0:6}" "${REPLY:6}"
;;
\[????\]*Linking*)
printf "$YELLOW%s\e[$GREEN2%s\n" "${REPLY:0:6}" "${REPLY:6}"
;;
*)
printf "$YELLOW%s\n" "$REPLY"
;;
esac
done
printf "$STOP"
}
这样,cmake 就可以通过 printf 获得所有默认颜色。百分比(默认为灰色)现在变为黄色,百分比后的构建线也变为黄色(默认为灰色)。cmake 输出的任何其他内容都具有颜色,而没有 printf 时 cmake 也具有这些颜色。感谢您的帮助 :)
另一个具有启用和禁用功能的按钮用于其他用途,不适用于 cmake。