9

特定のポート (開いている) のホストでコマンドを実行telnetしていますが、0 (成功) が返されます。

telnet を手動で試すには、次のコマンドを入力し、次に control+bracket ie^]を押し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

ここで、人間の介入なしで同じ操作を実行したかったのです。つまり、キーを手動で入力して^]押してプロンプトに移動し、telnet コマンドを入力して(または) telnet コマンドを入力して、最終的にプロンプ​​トに戻りたくありません。Entertelnet>closequit$

このために、echo -eコマンドのオプションを使用して^]\n(改行文字、つまりEnterキーの場合)とcloseコマンド(telnet>プロンプトに戻るように$プロンプ​​トの場合)を指定してみました。これを行うと、期待どおりに機能しましたが、 last command の終了ステータスについては、( 0ではなく)echo $?取得しています。なんで?1

[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 を自動的に終了し、終了コードとして取得するにはどうすればよいですか? 前のコマンドの出力を取得する方法があれば、'外部ホストによって接続が閉じられました. ' 成功をマークする文字列 (0)。

4

5 に答える 5

0

必要なものを実現するには、他の Linux パッケージが必要になる場合がありexpectます。

于 2017-01-05T02:05:26.630 に答える