
Мне хотелось выполнить команду в удаленной оболочке в ее интерактивной среде, чтобы она .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
Сообщение "Псевдотерминал не будет выделен" носит исключительно информационный характер. Если команда, которую вы запускаете, не требует терминала, вам лучше запустить ssh с опцией -T
отключения выделения PTY и закрыть сообщение.
Похоже, что ваш локальный TTY по какой-то причине находится в странном состоянии. Запуск stty sane
должен сбросить терминал в пригодное для использования состояние. Я знаю, что вы сказали, что не можете печатать, но вы можете попробовать сделать это:
- Нажмите Control-Q (то есть, удерживая клавишу «Control», нажмите «Q»), чтобы отменить любую приостановку Ctrl-S/Ctrl-Q, которая может быть установлена.
- Нажмите Control-J. Это буквальный символ новой строки, который гарантирует, что оболочка готова прочитать новую командную строку.
- Введите "stty sane", затем снова Control-J. Попробуйте, даже если то, что вы вводите, не отображается на экране.
Если это не сработает, то единственным выходом будет запуск «stty sane» на зависшем TTY с другого терминала.
- Откройте другое окно терминала.
- Используйте «ps», чтобы выяснить, на каком PTY находится зависший сеанс.
- Запустить
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