Tengo un script bash que usa proceso de sustitución (< <) para mostrar continuamente el resultado de una proceso largo.

while read -r LINE
do
  something
done < <( unbuffer my_long_running_script)

Me gustaría solicitar la entrada del usuario en el medio.

while read -r LINE
do
  something
  ASK_THE_USER
done < <( unbuffer my_long_running_script)

Intenté con select o read básico, pero el resultado de my_long_running_script todavía está llegando y se toma como una respuesta (y por lo tanto no es válido).

¿Cómo puedo resolver esto?

2
Denis Rouzaud 12 ene. 2017 a las 12:48

1 respuesta

La mejor respuesta

Un simple ejemplo:

#!/usr/bin/env bash

while read -u 3 -r line; do
  echo "$line" # something
  read -p "Continue?" -r response
  [[ $response == 'y' ]] || break
done 3< <(unbuffer my_long_running_script)

Enviar la sustitución del proceso (<(...)) como entrada al descriptor de archivo personalizado 3 (3<) deja a stdin libre para leer desde la terminal.

-u 3 hace que read lea ese descriptor.

3
mklement0 12 ene. 2017 a las 13:56