Linux從
從timeout
執行時如何擷取nc
的退出狀態?
我想使用 netcat 測試與任意主機的連接。似乎該
-w
參數實際上並未在 5 秒後關閉連接。(這是在 Ubuntu 14.04 和netcat-traditional
1.10-40 上)。它只會繼續嘗試連接 5 秒鐘。我真正想知道的是是否nc
能夠成功連接到主機(退出狀態為0)。為了解決這個
nc
問題,我已經通過命令執行nc
了timeout
。這會產生所需的功能,但超時總是以 124 狀態碼退出。我真正想要的是
nc
. 跑步時我怎麼能得到它timeout 5 nc -w 5 bach; echo $?
從
timeout
手冊頁(GNU coreutils 8.22)…–preserve-status
以與命令相同的狀態退出,即使命令超時
所以你的命令會變成
timeout --preserve-status 5 nc -w 5 bach; echo $?
但是,我剛剛注意到原始
nc
命令使用的-w
選項不是我們想要的。如果連接時間過長,這會告訴nc
它在空閒時關閉連接,不要放棄。我們真正想要的選項是
-G
設置 TCP 連接超時。我們-w
也想要關閉連接(因為我們沒有發送任何東西)。這給出了一個簡單
nc
的命令nc -G 5 -w 5 bach; echo $?
另一種方法是將空行回
nc
顯到發送到伺服器echo | nc -G 5 bach; echo $?