因此,对于我的一台服务器,我所做的大部分工作都是用vim编辑文件。可以做一些像ssh me@myserver vim这样的事情吗?当我尝试这样做时,我会得到“警告,输出不是终端”,而vim是不可用的。
我读了ssh手册,但是bash不喜欢转义字符~C来创建命令终端。
发布于 2016-01-04 10:06:11
SSH会话可以在分配伪终端 (PTY)设备的远程服务器上启动,也可以不使用。
通常,当您通过SSH连接到远程主机时(没有指定命令),在正确验证之后运行默认的登录shell。在远程主机上运行此shell时,将自动为交互式外壳分配伪终端。这允许shell向用户的屏幕写入,这样它就可以执行诸如显示提示符之类的操作。
在交互会话期间,SSH_TTY环境变量被设置为远程PTY设备的设备节点,例如,/dev/pts/10,当伪终端退出时,ssh打印以下消息:
Connection to <remotehost> closed.对于非交互式SSH会话,即指定要在远程主机上运行的命令,不分配伪终端,并将命令输出发送给本地终端的stdout。当运行简单地从stdin读取输入并打印到stdout和/或stderr (例如ls、ps等)的命令时,这种默认行为工作得很好。在本例中,没有设置SSH_TTY环境变量,而且我还注意到TERM环境变量被设置为dumb。当不使用伪终端操作时,不支持转义字符(如~C );这使得程序能够安全地传输可能包含这些序列的二进制文件。
但是,像vim或top这样的程序需要能够使用各种终端功能(通常使用ncurses库)重新绘制屏幕。为此,他们需要一个终端设备--或一个模仿终端的设备。ssh客户端具有一个强制分配伪终端的-t选项.这个-t选项在SSH手册页中描述:
强制伪分配。这可以用于在远程计算机上执行基于屏幕的任意程序,这是非常有用的,例如在实现菜单服务时。多个-t选项强制分配tty,即使ssh没有本地tty。
因此,向SSH命令中添加-t选项是为Vim提供它可以使用的终端设备所需要做的全部工作:
ssh -t me@myserver vimhttps://askubuntu.com/questions/716682
复制相似问题