Tengo un programa que toma 2 entradas:
my_program --input1 {videoFile1} --input2 {videoFile2}
Quiero redirigir mis entradas a través de la sustitución del proceso (porque mis entradas son archivos de video grandes, que quiero transcodificar sobre la marcha). A través del experimento, estoy usando lo siguiente, que está funcionalmente bien:
my_program --input1 /dev/fd/63 --input2 /dev/fd/62 <( {video transcoding command 1} ) <( {video transcoding command 2} )
Mi pregunta es: ¿por qué los números de descriptor de archivo 63 y 62? ¿Están siempre garantizados para tomar esos valores, o esto depende del sistema?
Disculpas si esto está bien documentado, pero hasta ahora no puedo encontrarlo en mis búsquedas.
¡Gracias por tu tiempo!
bash
application-development
filesystem
geekydel
fuente
fuente
my_program --input1 <( {video transcoding command 1} ) --input2 <( {video transcoding command 2} )
ser equivalente, sin la necesidad de especificar explícitamente el descriptor del archivo de tubería.Respuestas:
El videoprocesamiento es bien conocido por buscar en el archivo. Eso significa que no puede usar una secuencia como entrada. Y si está utilizando la salida de otro programa, entonces es una secuencia, no importa si usa tuberías o fds.
Pero quizás tenga suerte de que su programa pueda usar tuberías. En ese caso, esto debería estar bien:
El <() puede parecer que le está dando algo en stdin al igual que <lo hace. Pero no lo hace. En su lugar, se sustituye con un enlace a la tubería:
Entonces puede estar en situaciones en las que esto tiene sentido:
fuente