![在終端機中輸入會幹擾後台運作的「nc」?](https://rvso.com/image/668804/%E5%9C%A8%E7%B5%82%E7%AB%AF%E6%A9%9F%E4%B8%AD%E8%BC%B8%E5%85%A5%E6%9C%83%E5%B9%B9%E6%93%BE%E5%BE%8C%E5%8F%B0%E9%81%8B%E4%BD%9C%E7%9A%84%E3%80%8Cnc%E3%80%8D%EF%BC%9F.png)
我可以運行這兩個命令:
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
當作業更改狀態時,命令新增或刪除 & 符號是正常的。