Onde `xargs` adiciona a opção de STDIN?

Onde `xargs` adiciona a opção de STDIN?

Por alguns motivos, a ordem das opções é importante para o comando. Por exemplo, diferentes ordens de opções podem causar ações diferentes em ffmpeg, então xargsde onde é adicionada a opção stdin?

Por exemplo:

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

é totalmente equivalente a:

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

mas se eu quiser enviar input.avide echopara xargs ffmpeg -i -r 24 output.avipor pipe, como defino a string de STDIN para uma posição especificada?

Responder1

Não tenho certeza se estou entendendo você, mas se você está perguntando como pode controlar onde xargsos argumentos são colocados quando passados ​​​​para ele, você pode usar a opção -I{}para indicar qual macro deseja usar para a entrada colada xargse depois usar desta macro onde quer que você queira que as coisas sejam xargsexpandidas.

OBSERVAÇÃO:Estou usando a notação {}para minha macro e simplesmente coloco essa macro onde quiser que os argumentos sejam expandidos.

Exemplo

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

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

$ echo hi | xargs -I{} echo {} {} bye
hi hi bye
trecho da página de manual do 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.

informação relacionada