有没有办法$PS1
使用 ANSI 转义序列来隐藏 Bash 提示符 () 中的某些信息,例如“隐形颜色”之类的信息。
$TERM == linux
该方法应该是通用的。它不应该使用某些罕见终端类型的特殊隐身功能。隐藏的数据也应该在纯 Linux 控制台 () 中保持隐藏。
答案1
将前景色和背景色设置为相同:
PS1='\[$(tput setab 0)$(tput setaf 0)\]hello\[$(tput sgr0)\]$ '
如果您的屏幕背景颜色不同,那么您将看到一个彩色条,但文本仍然不可见。如果您使用鼠标,您将能够选择、复制和粘贴它,并且粘贴的副本将可见。
通过使用tput
而不是硬编码转义码,这将可移植到不同的终端类型。但是,如果您在定义变量的同时定义它们PS1
并在提示中使用它们,则可以加快速度。这样,tput
每次发出提示时都不会多次调用。
back=$(tput setab 0)
fore=$(tput setaf 0)
none=$(tput sgr0)
PS1='\[$back$fore\]hello\[$none\]$ '
编辑:
制作明显的提示中包含零宽度文本,只需按退格键即可。要获取,^?
只需按 Ctrl-v,然后按退格键。
PS1='\[hello ^?^?^?^?^?^?\]$ '
为了适应各种宽度的文本:
PS1='This shows\[$(word='This doesn't';bs=${word//?/^?};echo "$word$bs")\]$ '
使用变量可能会违背解析元数据的目的,但是为了完整性我将其包括在内:
text='Something to hide'
PS1='This shows\[$(word=$text;bs=${word//?/^?};echo "$word$bs")\]$ '
或者
PS1='This shows\[$(bs=${text//?/^?};echo "$text$bs")\]$ '
编辑2:
就此而言,你可以这样做:
PS1='This shows$(: This is hidden)$ '
编辑3:
为了使其更加动态,请使用PROMPT_COMMAND
设置PS1
:
$ PROMPT_COMMAND="PS1='This shows\$(: '\$data')$ '"
This shows$ data="This is hidden"
This shows$ echo "Prompt: $PS1"
Prompt: This shows$(: This is hidden)$
This shows$ data="Top Secret"
This shows$ echo "Prompt: $PS1"
Prompt: This shows$(: Top Secret)$
引用可能是一个挑战。如果您可以避免在数据中使用单引号或双引号,该PROMPT_COMMAND
技术将可以正常工作。