Не могу больше печатать на Git bash после возврата из ssh -tt

Не могу больше печатать на Git bash после возврата из ssh -tt

Мне хотелось выполнить команду в удаленной оболочке в ее интерактивной среде, чтобы она .bash_profileсначала загрузила туда мой удаленный интерфейс, прежде чем выполнять команду.

Это работает отлично:

  • echo "command" | ssh user@remote_host [1]

Но выдает ошибку

Псевдотерминал не будет выделен, поскольку stdin не является терминалом.

Я не знаю, является ли это проблемой, потому что приведенная выше команда отлично подходит для моих целей, но я все равно искал решение, чтобы это исправить, и нашел

  • ssh -t -t [2]

Объединив их, вы получите echo "command" | ssh -tt user@remote_hostто, что работает отлично.

Но по какой-то странной причине в Git bash, после возврата из выполнения команды, я больше не могу печатать. Я тестировал это на Cygwin, где это работает отлично, так что эта проблема есть только в Git bash.

Я попытался ввести команду exitна случай, если она все еще невидимо застряла в удаленной оболочке, но ничего не получилось.

Есть идеи, в чем может быть проблема при выполнении ssh -ttGit Bash?

решение1

Сообщение "Псевдотерминал не будет выделен" носит исключительно информационный характер. Если команда, которую вы запускаете, не требует терминала, вам лучше запустить ssh с опцией -Tотключения выделения PTY и закрыть сообщение.

Похоже, что ваш локальный TTY по какой-то причине находится в странном состоянии. Запуск stty saneдолжен сбросить терминал в пригодное для использования состояние. Я знаю, что вы сказали, что не можете печатать, но вы можете попробовать сделать это:

  1. Нажмите Control-Q (то есть, удерживая клавишу «Control», нажмите «Q»), чтобы отменить любую приостановку Ctrl-S/Ctrl-Q, которая может быть установлена.
  2. Нажмите Control-J. Это буквальный символ новой строки, который гарантирует, что оболочка готова прочитать новую командную строку.
  3. Введите "stty sane", затем снова Control-J. Попробуйте, даже если то, что вы вводите, не отображается на экране.

Если это не сработает, то единственным выходом будет запуск «stty sane» на зависшем TTY с другого терминала.

  1. Откройте другое окно терминала.
  2. Используйте «ps», чтобы выяснить, на каком PTY находится зависший сеанс.
  3. Запустить stty saneс перенаправлением ввода из PTY.

Например, в Linux:

$ ps -fu jdoe
...
jdoe   2083  2080  0 22:17 pts/0    00:00:00 /bin/bash  <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0

Связанный контент