
По некоторым причинам порядок опций важен для команды. Например, разный порядок опций может вызывать разные действия в 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.