Где `xargs` добавляет опцию из STDIN?

Где `xargs` добавляет опцию из STDIN?

По некоторым причинам порядок опций важен для команды. Например, разный порядок опций может вызывать разные действия в ffmpeg, так где xargsдобавить опцию из stdin?

Например:

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

полностью эквивалентно:

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

но если я хочу отправить данные input.aviиз echoв xargs ffmpeg -i -r 24 output.aviпо конвейеру, как мне установить строку из STDIN в указанную позицию?

решение1

Я не совсем уверен, что понимаю вас, но если вы спрашиваете, как можно контролировать, где xargsразмещаются аргументы при передаче, вы можете использовать переключатель, -I{}чтобы обозначить, какой макрос вы хотите использовать для ввода, куда вставляются данные xargs, а затем использовать этот макрос там, где вы хотите, чтобы переданные данные были xargsразвернуты.

ПРИМЕЧАНИЕ:Я использую обозначение {}для своего макроса, а затем просто помещаю этот макрос туда, где мне нужно раскрыть аргументы.

Пример

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

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

$ echo hi | xargs -I{} echo {} {} bye
hi hi bye
выдержка из страницы руководства 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.

Связанный контент