我在telnet
主机上为给定端口(打开)运行命令,它返回 0(成功)。
对于手动尝试 telnet,我输入以下命令,然后按 control+bracket ie ^]
,然后按Enter
键,然后我得到telnet>
提示,如果我输入close
or quit
,它会返回$
提示并看到最后一个命令的退出状态显示0
为(成功),因为端口 2878 已打开(根据 telnet 命令的输出)。
[vagrant@myvagrant /tmp] $ telnet `hostname` 2878
Trying 127.0.0.1...
Connected to myvagrant.
Escape character is '^]'.
^]
telnet> close
Connection closed.
[vagrant@myvagrant /tmp] $ echo $?
0
现在,我想在没有任何人为干预的情况下运行相同的操作,即我不想手动给出^]
并按下Enter
键来进入telnet>
提示符,然后输入close
(或quit
)telnet 命令最终回到$
提示符。
为此,我尝试使用echo -e
命令的选项并给出^]
, \n
(用于换行符,即Enter
键)和close
命令(用于telnet>
提示,以便我回到$
提示)。这样做,有点像预期的那样工作,但是对于 last command 的退出状态echo $?
,我得到了1
(而不是0)。为什么?
[vagrant@myvagrant /tmp] $ echo -e "^]\nclose" | telnet `hostname` 2878
Trying 127.0.0.1...
Connected to myvagrant.
Escape character is '^]'.
Connection closed by foreign host.
[vagrant@myvagrant /tmp] $
[vagrant@myvagrant /tmp] $ echo $?
1
[vagrant@myvagrant /tmp] $
或者也尝试了 here-doc 方法,但不确定为什么它1
会为打开的有效端口返回(作为退出代码)。
[vagrant@myvagrant /tmp] $ telnet `hostname` 2878 <<GIGA
> echo ^]
> echo close
> GIGA
Trying 127.0.0.1...
Connected to myvagrant.
Escape character is '^]'.
Connection closed by foreign host.
[vagrant@myvagrant ~/aks/always-latest-ws-sunny] $ echo $?
1
[vagrant@myvagrant ~/aks/always-latest-ws-sunny] $
0
如果端口打开并作为退出代码获取,如何自动退出 telnet ?如果有办法捕获上一个命令的输出,也许我可以 grep '连接被外部主机关闭。' 字符串将其标记为成功 (0)。