linux - 如何通过套接字将 `eof` 信号发送到在远程 shell 中运行的命令?

标签 linux sockets python-3.x signals

How to send eof signal, over a socket, to a command running in remote shell?

我使用 Python 编程,使用套接字,一个远程 shell 应用程序,我在其中发送命令以在另一台 PC 上执行。

一切正常(对于大多数命令),除了像 cat > file 这样的命令导致我出现问题。

通常,我会用 CTRL + D(eof 信号)终止上面的命令,但在我的客户端中按 CTRL + D,不会将信号发送到远程 shell。因此,我无法终止命令,我被卡住了。

有人有建议吗?

最佳答案

eof 不是信号,而是在您键入 ctrl-d 时由 tty 驱动程序实现为长度为 0 的读取。

如果您的 Remote 没有在 tty 中运行,那么您无法生成 eof,因为您无法发送长度为 0 的数据包。但是,如果您运行类似 script/dev/null 的程序作为远程 shell 中的第一个命令,然后这会将你的 shell 包裹在一个伪 tty 中,你将能够发送一个真正的 ctrl-d 字符(十六进制 0x04)并且 pty 将转换例如,这到 eof 并结束一只猫。向远程发送一个 stty -a 以检查您的 pty 中是否启用了 eol。


stty -a 在我的终端上显示 lnext = ^V (literal-next char) 所以我可以输入 ctrl-vctrl-d 输入一个真正的十六进制 0x04 字符。

我选择了 script 因为我知道它有效地在通信中插入了一个伪 tty,并且对数据流没有任何作用。这不是它的原始目的(请参阅其手册页),但这并不重要。

关于linux - 如何通过套接字将 `eof` 信号发送到在远程 shell 中运行的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023586/

相关文章:

python-3.x - 没有聚合函数的数据透视/交叉表重复问题?

PHP5-Mcrypt安装报错无安装候选

linux - 删除文本文件中的行(调用)

c - 包括 Linux Headers 返回 No such file or directory

linux - 如何在 bash 作业列表中扩展变量

node.js - 如何在 Node 中拦截传出的tcp消息?

c# - 应用程序如何跨用户帐户进行通信?

python-3.x - wand.image 导入错误 : shared library not found. 您可能没有安装 ImageMagick 库

c - 针对旧版 Windows,可以使用什么来代替 getaddrinfo() 和 freeaddrinfo()?

Python3 通过多处理并行化作业