Defina as cores do primeiro plano e do plano de fundo da mesma forma:
PS1='\[$(tput setab 0)$(tput setaf 0)\]hello\[$(tput sgr0)\]$ '
Se a cor de fundo da tela for diferente, você terá uma barra colorida que será exibida, mas o texto ainda ficará invisível. Se você estiver usando um mouse, poderá selecionar, copiar e colá-lo, e a cópia colada ficará visível.
Usando tput
em vez de codificar os códigos de escape, isso será portátil para diferentes tipos de terminais. Você pode acelerar as coisas, no entanto, se definir variáveis ao mesmo tempo, defina PS1
e use-as no seu prompt. Dessa forma, tput
não é chamado várias vezes toda vez que um prompt é emitido.
back=$(tput setab 0)
fore=$(tput setaf 0)
none=$(tput sgr0)
PS1='\[$back$fore\]hello\[$none\]$ '
Editar:
Para tornar aparente texto com largura zero incluído no prompt, apenas faça o backspace sobre ele. Para obter o ^?
, basta pressionar Ctrl-v e retroceder.
PS1='\[hello ^?^?^?^?^?^?\]$ '
Para acomodar texto de várias larguras:
PS1='This shows\[$(word='This doesn't';bs=${word//?/^?};echo "$word$bs")\]$ '
O uso de uma variável provavelmente acabaria com seu propósito de analisar metadados, mas eu a incluo por completo:
text='Something to hide'
PS1='This shows\[$(word=$text;bs=${word//?/^?};echo "$word$bs")\]$ '
ou
PS1='This shows\[$(bs=${text//?/^?};echo "$text$bs")\]$ '
Editar 2:
Para essa questão, você pode fazer isso:
PS1='This shows$(: This is hidden)$ '
Editar 3:
Para torná-lo mais dinâmico, use PROMPT_COMMAND
para definir 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)$
Citar pode ser um desafio. Se você puder evitar aspas simples ou duplas em seus dados, a técnica PROMPT_COMMAND
funcionará bem.