Я могу запустить эти две команды:
nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &
Все работает как положено с output.txt
заполнение буквой "а" (с другого терминала). Но если ввести один символ в терминал, выполняющий фоновые задания, отправка 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
netcat является двунаправленным. Копирует из сокет на стандартный вывод и к сокет из stdin. Когда вы нажимаете клавишу, он замечает, что данные доступны на stdin (tty), и пытается их прочитать. Фоновым заданиям не разрешено читать с tty, поэтому он приостанавливается.
Если вы не собираетесь отправлять какие-либо данные в сокет, вам следует добавить </dev/null
в вашу команду netcat.
И это нормально для jobs
команда для добавления или удаления амперсанда при изменении состояния задания.