-1

Я хотел выполнить команду в удаленной оболочке в ее интерактивной среде, чтобы она сначала загружала туда мой удаленный .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 -tt на Git bash?

1 ответ1

2

Сообщение «Псевдо-терминал не будет выделено» носит исключительно информационный характер. Если используемой команде не нужен терминал, вам лучше запустить 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .