Использование netcat / cat в фоновом сценарии оболочки (Как избежать остановки (ввод tty)?)

Аннотация: Как запустить интерактивную задачу в фоновом режиме?

Подробности: Я пытаюсь запустить этот простой сценарий под оболочкой пепла (Busybox) в качестве фоновой задачи.

myscript.sh &

Однако сценарий немедленно останавливается ...

[1] + Stopped (tty input) myscript.sh

Содержимое myscript.sh ... (только релевантная часть, кроме того, что я перехватываю SIGINT , SIGHUP и т. Д.)

#!/bin/sh

catpid=0

START_COPY()
{
  cat /dev/charfile > /path/outfile &
  catpid = $! 
}

STOP_COPY()
{
  kill catpid 
}

netcat SOME_IP PORT | while read EVENT
do
  case $EVENT in
    start) START_COPY;;
    stop) STOP_COPY;;
  esac
done

Из простых тестов командной строки я обнаружил, что бот cat и netcat пытаются читать с tty. Обратите внимание, что эта версия netcat не имеет -e для подавления tty.

Что теперь можно сделать, чтобы избежать остановки myscript?

То, что я пробовал безуспешно:

1) netcat / cat. .. tty )

2) Запуск блока, содержащего cat и netcat, в подоболочке с использованием (). Это может сработать, но тогда как получить PID кота?

К вам, эксперты ...


Проблема все еще существует. Простой тест для всех вас:

1) В одном терминале запустите netcat -l -p 11111 (без &)

2) В другом терминале запустите netcat localhost 11111 & (Через некоторое время это должно прекратиться с сообщением Остановлен (ввод TTY))

Как этого избежать?

8
задан LovelyVirus 21 August 2011 в 14:39
поделиться