Resumen: ¿Cómo ejecutar una tarea interactiva en segundo plano?Uso de netcat/cat en una secuencia de comandos shell de fondo (Cómo evitar detenido (entrada tty)?)
Detalles: Estoy tratando de ejecutar este script simple en ash shell (Busybox) como una tarea en segundo plano.
myscript.sh &
Sin embargo, la secuencia de comandos se detiene inmediatamente ...
[1] + Stopped (entrada TTY) myscript.sh
El miscript .sh contents ... (solo la parte relvant, aparte de que atrapo SIGINT, SIGHUP, etc.)
#!/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
A partir de simples pruebas de línea de comandos encontré que bot cat y netcat intentan leer de tty. Tenga en cuenta que esta versión de netcat no tiene que suprimir tty.
Ahora, ¿qué se puede hacer para evitar que myscript se detenga?
cosas que he probado hasta para sin ningún éxito:
1) netcat/cat ... </dev/tty (o la salida de tty
)
2) Ejecutar el bloque que contiene gato y netcat en una subcamada usando(). Esto puede funcionar, pero ¿cómo agarrar el PID del gato?
a usted expertos ...
todavía existe el problema. Una prueba simple para todos a probar:
1) En un terminal de ejecución netcat -l -p 11111 (sin &)
2) En otro terminal localhost plazo netcat 11111 & (Esto debe detenerse después de una mientras que con el mensaje Detenido (entrada TTY))
¿Cómo evitar esto?
¿No hay más expertos? ¿Alguna idea? – LovelyVirus
Si está bien con la captura de entrada y salida desde un subproceso, puede usar 'script'. Si eso no funciona, puede intentar investigar ['socat'] (http://www.dest-unreach.org/socat/doc/socat.html); tiene un manejo avanzado de PTY, pero no pude encontrar la forma de capturar STDIN. –
La ilusión es parte del script que no funcionó. socat no es la opción para el medio ambiente que tengo (no puedo obtenerlo allí). Se han cansado de redirigir/dev/ttyS0 a netcat y parece estar funcionando, pero luego deja de recibir señales. – LovelyVirus