
我可以運行這兩個命令:
nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &
所有工作均按預期進行,並output.txt
填充“a”(來自不同終端的尾部)。但是,如果在運行後台作業的終端機中輸入單個字符,則發送nc
將從Running
:Stopped
$ jobs
[1]+ Stopped nc -l localhost 8888 -v >> output.txt
[2]- Running ( while true; do
sleep 1; echo a;
done ) | nc localhost 8888 &
另請注意,它失去了“背景”& 符號。不知道從哪裡開始調試。這是預期的行為嗎?謝謝。
Mac OSX 10.9、GNU Bash 3.2.52
答案1
netcat 是雙向的。它複製從到標準輸出的套接字,以及到來自標準輸入的套接字。當您按下某個按鍵時,它會注意到 stdin(tty)上有可用資料並嘗試讀取它。後台作業不允許從 tty 讀取,因此它會被掛起。
如果您不打算在套接字上發送任何數據,則應該將其添加</dev/null
到 netcat 命令中。
jobs
當作業更改狀態時,命令新增或刪除 & 符號是正常的。