Я запускаю команду telnet
на хосте для данного порта (который открыт), она возвращает 0 (успех).
Чтобы попробовать telnet вручную, я набираю следующую команду, затем нажимаю control+bracket, т.е. ^]
, затем нажимаю клавишу Enter
, затем получаю приглашение telnet>
, где, если я набираю close
или 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>
, а затем ввести команду telnet close
(или quit
), чтобы, наконец, вернуться к $
быстрый.
Для этого я попытался использовать параметр команды echo -e
и указать ^]
, \n
(для символа новой строки, то есть клавиши Enter
) и команды close
(для приглашения telnet>
, чтобы вернуться к приглашению $
). Это сработало, как и ожидалось, но для статуса выхода последней команды 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] $
Как я могу автоматически выйти из telnet, если порт открыт и получить 0
в качестве кода выхода? Если есть способ перехватить вывод предыдущей команды, возможно, я смогу выполнить grep строку «Connection Closed by Foreign Host.», чтобы пометить ее как успешную (0).