Sustitución de procesos con script Perl
Tengo un script en Perl que requiere los siguientes argumentos:
count.pl OUTPUT_FILE INPUT_FILE
Lo que quiero hacer es usar la sustitución de procesos en lugar de especificar INPUT_FILE explícitamente, por ejemplo:
count.pl count.txt <(cat test.txt)
Sin embargo, parece que el script no recibe ninguna entrada de la sustitución del proceso.
Que estoy haciendo mal
Respuestas
La secuencia de comandos se utiliza-T the-source-file para determinar si el archivo contiene texto .
Ese -Toperador lee el inicio del archivo y usa heurística para determinar si se ve como texto o no. Pero si el archivo es una tubería como en el <(...)caso, entonces lo que ha leído no se puede volver a leer.
Puedes reproducir con:
$ perl -e '$file = shift; -T $file; open F, "<", $file; print while <F>' <(seq 1867)
1861
1862
1863
1864
1865
1866
1867
Vea cómo -Tha consumido 8KiB de cuya salida seqya no están allí para que el while <F>bucle los lea.
Aquí, puede usar zsh y su =(...)forma de sustitución de procesos que usa un archivo temporal en lugar de una tubería. O (... | psub -f)en el fishcaparazón. O elimine esa llamada a -Tde ese script. O reescriba ese script para que funcione con <<>>/ <>(por lo que también funcionaría en stdin cuando no se pasa ningún argumento de archivo) y genera en stdout. Realmente no veo el sentido de que tome nombres de archivo como argumentos, ya que los procesa todos en forma de flujo.