me pregunto cómo crear una tuberíatubo de Linux con múltiples programas pidiendo la entrada del usuario
program 1 | ... | program N
donde varios de los programas de pedir la entrada del usuario. El problema es que |
inicia los programas en paralelo y, por lo tanto, comienzan a leer desde el terminal en paralelo.
En tales casos, sería útil tener una tubería |
que inicie el programa (i + 1) solo después de que el programa i haya producido alguna salida.
Editar:
Ejemplo:
cat /dev/sda | bzip2 | gpg -c | ssh [email protected] 'cat > backup'
Aquí, tanto gpg -c
, así como ssh
pedir una contraseña.
Una solución alternativa para este ejemplo en particular sería la creación de pares de claves ssh, pero esto no es posible en todos los sistemas, y me preguntaba si existe una solución general. También gpg permite pasar la frase de contraseña como argumento de línea de comando, pero esto no se sugiere por razones de seguridad.
Una vez que conecte un programa para un tubo, que toma su entrada de otro programa, no el usuario. ¿Estás seguro de que quieres una pipa? Realmente no puedo pensar en un programa que tome las entradas * y * del usuario desde la entrada estándar. – chepner
No es una respuesta, pero una idea que puede apuntar en la dirección correcta: ¿podría incluir código en cada programa para verificar el resultado de una cadena en particular, actualizar una bandera una vez encontrada y hacer que las otras llamadas repunten hasta que la bandera del programa anterior actualizado, luego les permite ejecutar? – JohnLBevan
Muestra un ejemplo específico de lo que está sucediendo. Un programa podría leer de 'stdin' y de'/dev/tty', pero esto sería inusual. –