Исправлен последний аргумент с xargs

Можно ли использовать xargs для вызова команды, чтобы последний аргумент команды был фиксированным?

Моя попытка:

printf '%s\n' abcd | xargs -I{} echo {} LAST 

в конечном итоге делает

 echo a LAST echo b LAST echo c LAST echo d LAST 

Я хочу, чтобы Xargs вызывал

 echo abcd LAST #fit as many as you can but always finish wiht LAST 

Можно ли это сделать, желательно портативным способом?

2 Solutions collect form web for “Исправлен последний аргумент с xargs”

ТЛ; др; вот как вы могли бы сделать это переносимо, без -I и других неправильных опций:

 $ echo abcdfg | xargs -n 2 sh -c 'echo "$@" LAST' sh ab LAST cd LAST fg LAST $ seq 1 100000 | xargs sh -c 'echo "$#" LAST' sh 23692 LAST 21841 LAST 21841 LAST 21841 LAST 10785 LAST 

Проблема с опцией -I заключается в том, что она разбита по дизайну, и нет пути ее обойти:

 $ echo abcdfg | xargs -I {} -n 1 echo {} LAST abcdfg LAST $ echo abcdfg | xargs -I {} -n 2 echo {} LAST {} LAST ab {} LAST cd {} LAST fg 

Но они, вероятно, покрыты, потому что это то, что говорит стандарт:

-I replstr ^ [XSI] [Option Start] Режим вставки: утилита выполняется для каждой строки из стандартного ввода , принимая всю строку в качестве одного аргумента , вставляя ее в аргументы для каждого вхождения replstr.

И это ничего не говорит о взаимодействии с опциями -n и -d, поэтому они могут делать все, что пожелают.

Вот как это происходит на (более старой) FreeBSD, менее неожиданной, но нестандартной:

 fzu$ echo abcdfg | xargs -I {} -n 2 echo {} LAST ab LAST cd LAST fg LAST fzu$ echo abcdfg | xargs -I {} -n 1 echo {} LAST a LAST b LAST c LAST d LAST f LAST g LAST 

Не с xargs (один). Если у вас есть список элементов непредсказуемой длины, как xargs должен знать с начала (= первый элемент), какой элемент будет последним? Вам понадобятся некоторые дополнительные логики вокруг него, чтобы отделить нужный элемент от других.

  • Когда требуется xargs?
  • Не удалось создать большой файл tar с трубкой и xargs
  • Использование xargs с вводом из файла
  • Объединить xargs -I с sed
  • Различное поведение между find -exec и piping через xargs
  • Как мне регистрировать xargs -0 rm?
  • цикл xargs с переменной ввода для использования в команде с несколькими командами
  • grep для файлов и открыть итоговые совпадения
  • Как передать строки с одинарными кавычками в grep?
  • Каков синтаксис для передачи вывода команды в xargs?
  • Как перемещаться по xargs, где каждый скрипт использует общую переменную env
  • Linux и Unix - лучшая ОС в мире.