Установите цвета переднего плана и фона одинаково:
PS1='\[$(tput setab 0)$(tput setaf 0)\]hello\[$(tput sgr0)\]$ '
Если цвет фона вашего экрана другой, вы получите цветную полосу, которая будет отображаться, но текст все равно будет невидимым. Если вы используете мышь, вы сможете выбрать, скопировать и вставить ее, и вставленная копия будет видна.
Используя tput
вместо жесткого кодирования escape-кодов, это будет переносимо на разные типы терминалов. Однако вы можете ускорить процесс, если вы одновременно определяете переменные, определяете PS1
и используете их в своем приглашении. Таким образом, tput
не вызывается несколько раз каждый раз, когда выдается приглашение.
back=$(tput setab 0)
fore=$(tput setaf 0)
none=$(tput sgr0)
PS1='\[$back$fore\]hello\[$none\]$ '
Редактировать:
Чтобы сделать видимый текст нулевой ширины включенным в подсказку, просто нажмите на клавишу Backspace. Чтобы получить ^?
просто нажмите Ctrl-V, затем нажмите клавишу Backspace.
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
будет работать нормально.