当我在脚本中使用它时,无法关闭带有 echo "^]" 的 scpi(telnet) 会话

Posted

技术标签:

【中文标题】当我在脚本中使用它时,无法关闭带有 echo "^]" 的 scpi(telnet) 会话【英文标题】:Can't close a scpi(telnet) session with echo "^]" when I use it in a script 【发布时间】:2012-07-25 18:29:51 【问题描述】:

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

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

如果我通过脚本执行此操作,SCPI 会话似乎无法识别中断信号条件“^]”,并将在脚本结束后强制关闭(telnet 和 scpi)。 -> 消息:“被外部主机断开”。不幸的是,我在射频发生器的显示屏上收到错误消息 -> “无效标头”等。

连接成功后出现: 连接到 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    

【问题讨论】:

看来 scpi 有一个关闭命令(prefix_close),但如果只是关闭连接会产生相同的效果(只是从脚本会做)。启动时,telnet 可能会检查 stdin 是否为 tty(例如,IAC DO/DONT echo 需要)正常的 telnet 在非标准端口上使用时会禁用“活动”IAC 会话建立。 检查here你试过\035吗? CTRL + ALT GR + ] 为我工作 【参考方案1】:

在 Linux 上实际上是:

CTRL + ] 然后 ENTER

最后输入quit 命令。

^]

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

【讨论】:

然后输入退出。这比退出 vi 还要困难。 除了输入quit,您还可以按CTRL + D(意思是“流结束”)退出telnet。 您可以输入q,而不是quit 这在 MacBook 上很难。推荐?【参考方案2】:

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

【讨论】:

也在arch linux中工作过。 感谢上帝......如果我在丹麦键盘上按下 CTRL-alt-gr 9(在 dk 键盘上 altgr 9 是 ]),我的 mac 只会更改窗口...... 我使用的是 SLES 11,这是唯一适合我的建议解决方案。【参考方案3】:

关闭会话使用下面的命令

    Ctrl + ]​​i> telnet> 退出

它在 REHL 和 CentOS 中完美运行。

【讨论】:

【参考方案4】:

^] 表示ctrl + right 括号。尽管很奇怪,但它确实有效。您将被带到 telnet 提示符,您可以在其中键入 quit。

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

以下是基于 cmets 的列表:

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

【讨论】:

这些组合可能仅适用于 macOS。原始答案在此处复制粘贴后已扩展:superuser.com/a/427 我希望这个答案对你有所帮助。 我使用的是德语键盘,Ctrl + Alt Gr + 9(其中Alt Gr + 9])确实为我工作。【参考方案5】:

一定是这样。因为在服务器端打印的^] 对客户端没有任何意义。客户端必须先捕获此符号,然后才能将其传输到服务器,当然您不能仅将其写入服务器上运行的程序中的终端。

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

    如果您在正在运行的程序中,您可以简单地终止它(shell 中的exit 或python 中的sys.exit() 或许多其他语言中的exit())。 如果您无法控制程序流程,您可以通过终止终端所有者的进程来关闭终端。你需要找到进程,然后使用kill ...(进程的PID而不是...)。 如果您想从客户端关闭客户端,您需要在客户端执行相同操作 (kill ...)。

【讨论】:

【参考方案6】:

在我的丹麦键盘上,它不是 Ctrl + å - 而是 å 右侧的键(有一顶帽子,代字号和变音符号)

【讨论】:

在我的挪威语键盘中 shift + alt + 9 有效(因为 alt + 9 是 "]" )【参考方案7】:

在带有土耳其语键盘的 MacOS 上尝试:Ctrl + Option + ü 那么,> quit

【讨论】:

【参考方案8】:

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

telnet> qq 代表退出

【讨论】:

取决于键盘设置。【参考方案9】:

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

[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 使用它作为转义字符。我发现这很有用,因为字符 ^] 在不同的键盘布局上可能会有所不同。

【讨论】:

以上是关于当我在脚本中使用它时,无法关闭带有 echo "^]" 的 scpi(telnet) 会话的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 3.0:保存工作脚本后,如果我关闭然后重新打开脚本,当我尝试运行它时会收到一条错误消息

当我尝试加载尺寸为 16000 X 16000 的图像时,使用带有 flash builder 4.7 的操作脚本 3,无法上传

带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP

带有 Javascript 的 MIDI 键盘 [关闭]

无法关闭 NavigationController

c#WPF带有Highchart的Web浏览器,来自外部源的Javascript无法正常工作“此页面上的脚本出现错误”