我想在远程 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
应该会将终端重置为可用状态。我知道您说您无法打字,但您可以尝试这样做:
- 键入 Control-Q(即按住“Control”键并按“Q”)可取消可能存在的任何 Ctrl-S/Ctrl-Q 暂停
- 键入 Control-J。这是一个文字换行符,用于确保 shell 已准备好读取新命令行。
- 输入“stty sane”,然后再次按 Control-J。即使您输入的内容没有出现在屏幕上,也请尝试一下。
如果这不起作用,最关键的选择是从另一个终端在卡住的 TTY 上运行“stty sane”。
- 打开另一个终端窗口。
- 使用“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