使用脚本时,无法通过输入“^]”来关闭一个SCPI(Telnet)会话。

37

使用echo-e "\ 029"也不起作用。但是如果在终端会话中直接使用 strg + alt gr + ] ,它就可以工作。

我必须更具体地问我的问题:
我通过Telnet / SCPI连接RF发生器(AGILENT)。
如果我在终端上手动执行此操作,并在会话结束时按下 CTRL + ALT GR + ] 键输入'^]',然后正常关闭scpi会话,然后我可以输入quit来正确关闭telnet会话。
RF发生器的显示屏上没有错误消息。所以应该是这样的。

如果我通过脚本执行此操作,则SCPI会话似乎无法识别断开信号条件'^]',并且将在脚本(telnet和scpi)结束后被强制关闭。 ->消息:“远程主机断开连接”。不幸的是,RF发生器的显示屏上出现错误消息->“无效标题”等。

成功连接后出现: 已连接到192.168.10.66 转义字符为‘^]’-> 这是问题的关键点。在终端中手动输入可以正确工作,但脚本却不行。

我的脚本大致如下:

function  getIDNMessage()  
{
    (      
        echo open $1 $2  
        sleep 1  
        echo "*IDN?"  
        sleep 1  
        echo –e "\029"         # or echo “^]” does not work well  
        sleep 1  
        echo "quit\r"  
        sleep 1  
    ) | telnet > scpi_telnet.log 2>&1
}

getIDNMessage 192.168.10.66 7777    

1
看起来scpi有一个关闭命令(prefix_close),但如果只是关闭连接也会产生相同的效果,这一点并不让我感到惊讶(只需在脚本末尾跳出即可)。在启动时,telnet可能会检查stdin是否为tty(例如需要IAC DO/DONT echo),当在非标准端口上使用时,普通的telnet会禁用“主动”IAC会话建立。 - wildplasser
你尝试过使用\035吗?请查看这里:http://stackoverflow.com/questions/24337292/can-we-exit-without-error-from-telnet-with-mozrepl?lq=1 - Aquarius Power
1
CTRL + ALT GR + ] 对我有效。 - ffghfgh
10个回答

141

在Linux上,实际上是这样操作的:

CTRL + ] 然后 ENTER

最后输入 quit 命令即可。

^]

telnet> quit
Connection closed.
[fred@localhost ~]$

10
然后输入quit。这比退出vi还要困难。 - Manish Singh
1
你可以通过按下 CTRL + D(表示“流的结束”)来退出 Telnet,而不是输入 quit - qwertz
1
你可以输入 q 代替 quit - ROMANIA_engineer
在 MacBook 上做这件事很困难。有什么建议吗? - JoakimE

35

在Redhat系统上退出telnet:
输入"CTRL+5",然后输入"quit"


也在 Arch Linux 上工作过。 - gustavwiz
谢天谢地.. 在我的丹麦键盘上,如果我按下CTRL- alt-gr 9(altgr 9在dk键盘上是]),我的Mac会只是切换窗口.. - Alex R
我正在使用 SLES 11,这是唯一一个对我有效的建议解决方案。 - Playing With BI

8

要关闭会话,请使用以下命令

  1. Ctrl + ]
  2. telnet> quit

在REHL和CentOS中,它可以完美地工作。


6
^]表示ctrl +右方括号。虽然很奇怪,但它是有效的。您将进入telnet提示符,可以在那里键入quit退出。

在国际键盘上,]字符通常不是单个键,需要用其他键替换。正确的键通常是P键右侧的键或其后面的下一个键。

以下是基于下面的评论列表:

Finnish, Swedish, Norwegian, Danish: ctrl + å
French: ctrl + 6
German: ctrl + ü
Swiss: ctrl + ¨
Hungarian: ctrl + 5
Portuguese: ctrl + ´
Dutch, Belgian: ctrl + $
Canadian French: ctrl + ç

这些组合键可能仅适用于macOS。在将原始答案复制粘贴到此处后,已进行了扩展:https://superuser.com/a/427 - joki
希望这个答案对你有所帮助。 - Walk
我正在使用德国键盘,Ctrl + Alt Gr + 9(其中 Alt Gr + 9])对我有效。 - seyfahni

1

必须这样做。因为在服务器终端上打印的^]对客户端来说没有任何意义。客户端必须在它被传输到服务器之前捕获此符号,当然你不能在运行在服务器上的程序中将其写入终端。

所以你需要用其他方式中断会话。有许多方法。

  1. 如果你在运行的程序内部,可以简单地终止它(在shell中使用exit,在python中使用sys.exit(),在许多其他语言中使用exit())。
  2. 如果你无法控制程序流程,可以通过杀死拥有终端的进程来关闭终端。你需要找到该进程,然后使用kill ...(PID代替...)。
  3. 如果你想从客户端关闭客户端,你需要做同样的事情(kill ...),但是在客户端上执行。

1
在带有土耳其键盘的MacOS上尝试:
Ctrl + Option + ü

然后,
> quit

1

在我的丹麦键盘上,不是使用 Ctrl + å,而是使用位于 å 右侧的那个键(该键带有帽子、波浪线和分音符)。


在我的挪威键盘上,shift + alt + 9 可以使用(因为 alt + 9 是 "]")。 - Mr. Developerdude

0

如果您在2022年使用Mac OS或AWS Linux并使用Apple Magic键盘

^] 
telnet> quit
Connection closed.

^]代表的是“Control + ]”


0

Ctrl + ] 这将显示为 ^] 然后

telnet> q q 是退出的意思


根据键盘设置而定。 - socona

0

当打开一个连接时,您可以指定转义字符。例如:

[root@localhost ~]# telnet -e % localhost
Telnet escape character is '%'.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '%'.

>%

telnet> quit
Connection closed.
[root@localhost ~]#

在这里,我只是使用了%符号来关闭会话,因此我不得不告诉telnet将其用作转义字符。我发现这很有用,因为^]字符在不同的键盘布局上可能是不同的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接