
다음 두 가지 명령을 실행할 수 있습니다.
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 &
또한 "백그라운드" 앰퍼샌드가 느슨해집니다. 디버깅을 어디서 시작해야 할지 모르겠습니다. 이것이 예상되는 동작입니까? 감사해요.
맥 OSX 10.9, GNU 배시 3.2.52
답변1
netcat은 양방향입니다. 복사합니다~에서표준 출력에 대한 소켓, 그리고에게stdin의 소켓. 키를 누르면 stdin(tty)에 데이터가 있음을 인식하고 해당 데이터를 읽으려고 시도합니다. 백그라운드 작업은 tty에서 읽을 수 없으므로 일시 중지됩니다.
소켓에 데이터를 보내지 않으려면 </dev/null
netcat 명령에 추가해야 합니다.
jobs
그리고 작업 상태가 변경될 때 명령이 앰퍼샌드를 추가하거나 제거하는 것은 일반적입니다 .