我需要捕获终端的屏幕截图,其中键入的命令在视觉上“脱颖而出”。现在我正在使用它使我输入的命令变成“红色”:
PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[0;31m\]'
问题是:提示后的所有内容都是红色的,不仅仅是我输入的文本
我怎样才能解决这个问题?
我正在使用 bash (CentOS 7)。
答案1
您可以使用陷阱来实现此目的:
trap 'echo -ne "\e[0m"' DEBUG
DEBUG
根据 bash 的 man 的说法:执行上的陷阱
在每个简单命令、for 命令、case 命令、select 命令、每个算术 for 命令之前以及在 shell 函数中执行第一个命令之前
因此,每次执行该命令时,shell 都会插入\e[0m
禁用之前的颜色代码。仅在执行命令后通过提示重新设置它。
我在这里发现了公认的黑客技巧:https://wiki.archlinux.org/index.php/Color_Bash_Prompt#Different_colors_for_text_entry_and_console_output
答案2
PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[1;31m\]'
您可以通过更改输出颜色来解决此问题,下面是一个示例。
PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[1;32m\]'
上面的命令以绿色显示以下输出