更改输入文本的颜色,而不是输出

Dr.*_*ini 8 colors bash terminal centos

我需要捕获终端的屏幕截图,其中键入的命令在视觉上“脱颖而出”。现在我正在使用它来使我输入的命令变为“红色”:

PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[0;31m\]'
Run Code Online (Sandbox Code Playgroud)

问题是:提示后的一切都是红色的,不仅仅是我输入的文字

红色 linux 输出

我怎样才能解决这个问题?

我正在使用 bash (CentOS 7)。

Fre*_*rdt 6

您可以使用陷阱来实现此目的: trap 'echo -ne "\e[0m"' DEBUG

根据 bash 的人的说法:DEBUG执行上的陷阱

在每个简单命令、for 命令、case 命令、select 命令、命令的每个算术之前,以及在 shell 函数中执行第一个命令之前

所以每次执行命令时,shell 都会插入\e[0m禁用之前的颜色代码。一旦命令执行完毕,只能通过提示重新设置它。

我在这里找到了公认的黑客技巧:https ://wiki.archlinux.org/index.php/Color_Bash_Prompt#Different_colors_for_text_entry_and_console_output