我正在研究来自GNU储存库的Bash5.0。我想调试解析颜色的函数,所以我转到了颜色文件:
我在函数_rl_parse_colors中添加了类似的打印
printf ("[*] INSIDE _rl_parse_colors"); 我几乎在任何函数中都这样做,但是在编译它之后,我运行了它,但是它没有打印我的调试打印:
root@ubuntu:~/Desktop/bash-5.0# ./bash -c 'echo -e "\033[31mHello\e[0m World"'
Hello World我还尝试访问bash,然后运行它:
root@ubuntu:~/Desktop/bash-5.0# ./bash
root@ubuntu:~/Desktop/bash-5.0# echo $BASH_VERSION
5.0.0(8)-release
root@ubuntu:~/Desktop/bash-5.0# ./bash -c 'echo -e "\033[31mHello\e[0m World"'
Hello World它用红色打印"Hello“,但不印我的指纹。
这与我使用echo有关吗?我不认为它会有什么影响,因为bash最终会封装命令的STDOUT,因此它应该用红色绘制字符串。
发布于 2020-12-03 12:40:21
找到密码(我在bash-5.1-testing分支) --
文件中的lib/readline/parse-colors.c
300 void _rl_parse_colors(void)
301 {
302 #if defined (COLOR_SUPPORT)
303 const char *p; /* Pointer to character being parsed */
304 char *buf; /* color_buf buffer pointer */
305 int state; /* State of parser */
306 int ind_no; /* Indicator number */
307 char label[3]; /* Indicator label */
308 COLOR_EXT_TYPE *ext; /* Extension we are working on */
309
310 p = sh_get_env_value ("LS_COLORS");
311 if (p == 0 || *p == '\0')
312 {
313 _rl_color_ext_list = NULL;
314 return;
315 }
...在文件_rl_parse_colors()中只有一个lib/readline/readline.c调用
1215 /* Initialize the entire state of the world. */
1216 static void
1217 readline_initialize_everything (void)
1218 {
....
1287
1288 #if defined (COLOR_SUPPORT)
1289 if (_rl_colored_stats || _rl_colored_completion_prefix)
1290 _rl_parse_colors ();
1291 #endif
1292vars将_rl_colored_stats和_rl_colored_completion_prefix声音命名为这些读行设置:
[STEP 101] $ bind -v | grep color
set colored-completion-prefix off
set colored-stats off
[STEP 102] $我刚刚验证了这些步骤是否会进入_rl_parse_colors()
colored-completion-prefix或colored-stats中打开~/.inputrc。LS_COLORS./bash)根据bash手册(man bash):
colored-completion-prefix (Off)如果设置为On,则在列表完成时,readline使用不同的颜色显示可能完成的集合的公共前缀。颜色定义取自LS_COLORS环境变量的值。colored-stats (Off)如果设置为On,readline将使用不同的颜色显示可能的完成情况,以指示其文件类型。颜色定义取自LS_COLORS环境变量的值。
https://stackoverflow.com/questions/65125259
复制相似问题