¿Dónde agrega `xargs` la opción de STDIN?

¿Dónde agrega `xargs` la opción de STDIN?

Por algunas razones, el orden de las opciones es importante para el comando. Por ejemplo, diferentes órdenes de opciones pueden causar diferentes acciones en ffmpeg, entonces, ¿ xargsdesde dónde se agrega la opción stdin?

Por ejemplo:

$ echo 'output.avi' | xargs ffmpeg -i input.avi -r 24

es totalmente equivalente a:

$ ffmpeg -i inpit.avi -r 24 output.avi

pero si quiero enviar input.avidesde echoa xargs ffmpeg -i -r 24 output.avipor tubería, ¿cómo configuro la cadena desde STDIN en una posición específica?

Respuesta1

No estoy completamente seguro de haberlo seguido, pero si pregunta cómo puede controlar dónde xargsse colocan los argumentos cuando se le pasan, puede usar el interruptor -I{}para indicar qué macro desea usar para la entrada que se pega xargsy luego usarla. de esta macro donde quiera que se pasen las cosas para xargsexpandirlas.

NOTA:Estoy usando la notación {}para mi macro. Luego simplemente coloco esa macro donde quiera que se expandan los argumentos.

Ejemplo

$ echo hi | xargs -I{} echo {}
hi

$ echo hi | xargs -I{} echo {} {}
hi hi

$ echo hi | xargs -I{} echo {} {} bye
hi hi bye
extracto de la página de manual de xargs
   -I replace-str
      Replace  occurrences of replace-str in the initial-arguments with 
      names read from standard input.  Also, unquoted blanks do not 
      terminate input items; instead the separator is the newline 
      character.  Implies -x and -L 1.

información relacionada