特定のポート (開いている) のホストでコマンドを実行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 コマンドを入力して、最終的にプロンプトに戻りたくありません。Enter
telnet>
close
quit
$
このために、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)。