Запретить Bash печатать символы, которые были напечатаны до полной загрузки Bash - PullRequest
0 голосов
/ 15 апреля 2019

Любой, кто имеет сложный файл .bashrc , возможно, сталкивался с этим.Если вы печатаете что-либо во время загрузки Bash, набранные вами символы будут напечатаны как слева, так и справа от приглашения после его загрузки.

Например ...

Шаги дляВоспроизведите

  1. Добавьте sleep 5 в конец файла .bashrc
  2. Закройте и снова откройте эмулятор терминала
  3. После загрузки терминала, но до завершения загрузки Bash введите asdf

Фактический результат

asdfuser @ hostname $ asdf

Желаемый результат

user @ hostname $ asdf

Есть ли способ очистить текст слева от приглашения или предотвратить его появление с самого начала без выполнения clear или сброс ?

(Я спрашиваю, что бы это ни стоило, потому что я хотел бы программно создать сеанс tmux, который печатает определенный текст в приглашении, не выполняя его.tmux печатает текст до завершения загрузки Bash.Но это происходит даже вне tmux, как в Steps для воспроизведения выше, поэтому я не уверен, насколько уместно мое использование tmux для этого вопроса.)

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Кто-то предложил очистить текст, я думаю, вы могли бы сделать это, я знаю, что в bash есть Cl (L):

tmux splitw \;отправьте Cl "abcdef"

Очевидно, это не будет работать для ssh, только для оболочки.

0 голосов
/ 15 апреля 2019

Проблема в том, что tmux и большинство других терминалов создадут ptys с включенным ECHO, поэтому символы будут отображаться ядром еще до запуска оболочки. Теоретически вы можете запретить tmux делать это, а затем включить bash, но это будет означать изменения кода в обоих случаях и, вероятно, вызовет проблемы с другими приложениями.

Простой вариант - оставить tmux sleep на короткое время после создания панели, чтобы запустить оболочку, что-то вроде:

tmux splitw \; запустить "спать 0,5" \; отправить "abcdef"

(Могут работать даже меньшие сны, вы можете поэкспериментировать.)

Я не знаю насчет bash, но ksh, по крайней мере, похоже, устанавливает tty так, как ему нравится, так что вы можете также использовать wait-for, что-то вроде:

tmux splitw "stty -echo; tmux wait -S foo; exec $ SHELL" \; подожди фу \; отправить "abcdef"

Хотя я бы сам пошел спать.

...