Pregunta Salida de bash de tubería a los argumentos del script de Perl


Tengo el siguiente comando bash:

find repo -name '*.c'

Lo que quiero hacer es usar los archivos devueltos como argumentos en mi script de Perl, de modo que sea equivalente a ejecutar:

perl ./myscript file1.c file2.c file3.c ...

¿Cómo puedo hacer esto?


2


origen


Oye, creo que tuviste input confundido con arguments (input generalmente se asocia con un programa de standard in stream, que es diferente de sus argumentos). Actualicé su pregunta para reflejar esto en función de la respuesta que seleccionó y sus comentarios sobre las respuestas. Siéntase libre de revertir los cambios si fueran incorrectos. - Darth Android


Respuestas:


Tratar

find repo -name '*.c' | xargs perl ./yourscript

Esto debería ser lo mismo que

perl ./yourscript file1.c file2.c file3.c ...

0



Gracias, funciona Otro problema surgió: mis estimados usuarios usan espacios en los nombres de los archivos. ¿Cómo puedo ajustar cada nombre de archivo con "" antes de reemplazar los \ n-s por espacios? Lo siento por ser tonto pero soy completamente nuevo en bash. EDITAR: respuesta encontrada stackoverflow.com/a/6041695/747412 - WonderCsabo


Puedes intentar eso:

find repository -name '*.c' -exec perl -pe 's:\n: :g' {} +

El delimitador en la sustitución es : aquí, no es necesario usar / ambos en Perl & sed.

Si prefieres un verdadero pipe :

find repository -name '*.c' | xargs cat | perl -pe 's:\n: :g'

1



Versión de tubería añadida - Gilles Quenot
De acuerdo, pero tengo un script de Perl, que tengo que proporcionar una entrada como esta: ./myscript.perl -args arg archivo1 archivo2 ¿Cómo puedo conectar mi lista de archivos a este script? Lo siento si el OP no fue claro. - WonderCsabo