2013-12-18 80 views
1

我不知道爲什麼我的問題在發表評論後沒有得到跟進。但我曾嘗試使用不能使用stdout exec來結束Bash腳本

EXEC 3> & - 退出貓< & 3,仍然沒有

我也有試過貓< & 3 3> &出來 - 仍然不會工作

exec 3<>/dev/tcp/$1/37491 

echo -ne 060e2b3400$hexdec$cmdhex | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' >&3 

cat <&3 
exec 3>&- 

插座保持打開狀態。

+0

'cat'是否會返回允許執行最終的'exec'?它可能仍然在等待更多的輸入通過套接字到達。 – chepner

+0

@chepner它確實,但不會關閉或結束,除非我按ctrl + c。如果我在貓關閉之前運行exec 3 <& - 命令,那麼貓會說無效。 – user3100345

+0

我GOOGLE了執行命令的等在標準輸入使用和出和關閉沒有組合工程 – user3100345

回答

1

cat將工作後,您添加的任何內容都不會生效,因爲cat處於阻塞狀態,正在等待通過套接字進行的更多輸入。如果您可以安排從另一個進程關閉套接字,則將退出cat

類似以下內容可能工作:

exec 3<>/dev/tcp/$1/37491 

echo -ne 060e2b3400$hexdec$cmdhex | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' >&3 

(cat <&3; echo "Socket was closed") & 
sleep 10 
exec 3>&- 

cat將在一個子shell後臺運行,阻塞,直到關閉套接字。睡眠10秒後,腳本將關閉套接字,並且您應該看到輸出「套接字已關閉」。