从 ssh -tt 返回后无法在 Git bash 上输入任何内容

从 ssh -tt 返回后无法在 Git bash 上输入任何内容

我想在远程 shell 的交互环境中执行一个命令,以便让它.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以防它仍然无形地卡在那个远程 shell 中,但什么也没起作用。

ssh -tt您对在 Git bash 上执行的操作可能存在什么问题有任何想法吗?

答案1

“不会分配伪终端”消息只是信息性的。如果您正在运行的命令不需要终端,您最好运行 ssh 并选择-T禁用 PTY 分配并关闭该消息。

听起来您的本地 TTY 由于某种原因处于奇怪的状态。运行stty sane应该会将终端重置为可用状态。我知道您说您无法打字,但您可以尝试这样做:

  1. 键入 Control-Q(即按住“Control”键并按“Q”)可取消可能存在的任何 Ctrl-S/Ctrl-Q 暂停
  2. 键入 Control-J。这是一个文字换行符,用于确保 shell 已准备好读取新命令行。
  3. 输入“stty sane”,然后再次按 Control-J。即使您输入的内容没有出现在屏幕上,也请尝试一下。

如果这不起作用,最关键的选择是从另一个终端在卡住的 TTY 上运行“stty sane”。

  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

相关内容