当我在脚本中使用它时,无法关闭带有 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> q
q 代表退出
【讨论】:
取决于键盘设置。【参考方案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