Ejecute el comando Nohup con entrada

11

En UNIX, tengo un proceso que quiero ejecutar usando nohup. Sin embargo, este proceso esperará en algún momento cuando se me solicite que ingrese yeso noque continúe. Hasta ahora, en UNIX he estado haciendo lo siguiente:

nohup myprocess <<EOF
y
EOF

Entonces comienzo el proceso 'myprocess' usando nohup y pipe en un archivo con 'y' y luego cierro el archivo. Las líneas de arriba son efectivamente tres comandos separados, es decir, presiono enter en la primera línea en UNIX, luego aparece un mensaje donde ingreso 'y' y luego presiono enter para finalmente escribir 'EOF' y presiono volver nuevamente. Entonces esto funciona perfectamente, pero mi problema está debajo.

Ahora quiero ejecutar esto en Perl, pero no estoy seguro de cómo puedo ejecutar este comando, ya que tiene más de tres líneas. No sé si lo siguiente funcionará:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`
Jeff Schaller
fuente
esto debería funcionar de la manera en que está escrito en la pregunta (después de que la primera edición lo hizo un poco absurdo)
@hop Realmente no sé de qué estás hablando, la primera edición agregó una nueva línea y formateó las partes de la shell como código para que se muestren correctamente. No cambié prácticamente nada, la revisión original está aquí
Michael Mrozek
@Michael: tienes razón y lo siento. malinterpreté el diff y pensé que habías agregado los backticks. hace que la pregunta sea aún más absurda: el ejemplo dado debería funcionar.
@hop ¿El perl? Asumí que no funcionó sin intentarlo ya que no sé Perl, pero supongo que dijo "No sé si lo siguiente funcionará", así que tal vez esté bien; probablemente deberías responder que el ejemplo dado funciona
Michael Mrozek

Respuestas:

19

Si solo desea escribir un single yen el stdin del proceso, puede hacer esto:

(echo y | nohup myprocess) &

Si desea seguir escribiendo ypara cada solicitud que aparece, coreutil yesexiste exactamente para este propósito: seguirá escribiendo lo que usted le diga a stdout. Su valor predeterminado es generar "y", por lo que puede simplemente:

(yes | nohup myprocess) &

pero si necesitas algo más puedes pasarlo como argumento

Michael Mrozek
fuente
+1: no lo he visto yesusado en eones
msw
Michael, gracias por tu pronta respuesta. Sin embargo, creo que he probado tu sugerencia mediante la cual hago eco de Y en el proceso. Cuando hago esto, la salida siempre se derrama en mi terminal a pesar del hecho de que me he asegurado de que y esté en mi
El & no impide que la salida del proceso se escriba en la consola. Simplemente comienza en segundo plano.
fschmitt
¿Cómo tiene algo que ver esta respuesta con la pregunta?
@Riccardo Experimenté un poco y creo que tienes razón. Reparado, gracias
Michael Mrozek