Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何通过套接字向远程shell中运行的命令发送“eof”信号?_Linux_Sockets_Python 3.x_Signals - Fatal编程技术网

Linux 如何通过套接字向远程shell中运行的命令发送“eof”信号?

Linux 如何通过套接字向远程shell中运行的命令发送“eof”信号?,linux,sockets,python-3.x,signals,Linux,Sockets,Python 3.x,Signals,如何通过套接字向远程shell中运行的命令发送eof信号 我用Python编程,使用sockets,一个远程shell应用程序,在这里我发送命令在另一台PC上执行 一切正常(对于大多数命令),除了像cat>file这样的命令会给我带来问题 通常,我会用CTRL+D(eofsignal)终止上面的命令,但在我的客户端中按CTRL+D,不会将信号发送到远程shell。因此,我无法终止命令,我被卡住了 有人有什么建议吗?eof不是一个信号,而是由tty驱动程序在键入ctrl-d时作为长度为0的读取来实

如何通过套接字向远程shell中运行的命令发送
eof
信号

我用Python编程,使用sockets,一个远程shell应用程序,在这里我发送命令在另一台PC上执行

一切正常(对于大多数命令),除了像
cat>file
这样的命令会给我带来问题

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


有人有什么建议吗?

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

如果遥控器未在tty中运行,则无法生成eof,因为无法发送读取长度为0的数据包。但是,如果在远程shell中运行类似于
script/dev/null
的程序作为第一个命令,那么这将把shell封装在一个伪tty中,您将能够发送一个实际的ctrl-d字符(十六进制0x04),例如,pty将把它转换为eof并结束一个cat。向遥控器发送
stty-a
,检查您的pty中是否启用了eol


stty-a
在我的终端上显示
lnext=^V
(文本下一个字符),因此我可以键入ctrl-vctrl-d来输入一个真正的十六进制0x04字符


我选择了
script
,因为我知道它在通信中有效地插入了伪tty,而对数据流不做任何操作。这不是它最初的用途(请参见手册页),但这并不重要。

您可以尝试使用“here”语法来标记EOF:

cat > file <<-EOF
...
...
EOF

cat>文件如何从终端发送这样的十六进制值?为什么script/dev/null创建终端?我通常用这个文件来处理垃圾。我对答案添加了我的回复。谢谢。对于像我这样的新手来说,这是非常技术性的;但我会试试看。