XARGS(1) XARGS(1) НАЗВАНИЕ xargs - формирование списка аргументов и выполнение ко- манды СИНТАКСИС |xargs [-lчисло] [-iзам_цеп] [-nчисло] [-t] [-p] [-x] [-sразмер] | [-e[лконф_цеп]] [команда [начальный_аргумент ...]] ОПИСАНИЕ Команда xargs объединяет зафиксированный набор заданных в командной строке начальных_аргументов с аргументами, прочитанными со стандартного ввода, и выполняет указан- ную команду один или несколько раз. Число аргументов, которые должны быть прочитаны для каждого вызова коман- ды, и способ, которым они объединяются, определяются заданными опциями. Xargs использует значение переменной окружения $PATH для поиска команды, которая может быть файлом shell'а. Если команда опущена, используется /bin/echo. Аргументы, прочитанные со стандартного ввода, - это непрерывные цепочки символов, разделенные одним или несколькими пробелами, символами табуляции или перево- дами строки; пустые строки игнорируются. Чтобы включить в аргумент пробелы и табуляции, их надо выделить симв лами \ или кавычками; символы, заключенные в кавычки (одинарные или двойные) воспринимаются буквально; сами кавычки удаляются. Вне цепочек в кавычках обратная нак- лонная черта (\) вместе со следующим символом обознача- ет соответствующий управляющий символ. Конструирование каждого списка аргументов начинается с начальных_аргументов, за ними следует несколько аргу- ментов со стандартного ввода (есть исключение: см. оп- цию -i). Опции -i, -l и -n определяют, как выбирать ар гументы для каждого вызова команды. Когда ни одна из этих опций не указана, за начальными_аргументами следу ет несколько аргументов, прочитанных подряд со стан- дартного ввода до заполнения внутреннего буфера; затем выполняется команда с накопленными аргументами. Данный процесс повторяется до тех пор, пока все аргументы не будут исчерпаны. Если указаны взаимоисключающие опции (например, одновременно заданы опции -l и -n), берется во внимание последняя. Опциям команды xargs приписан следующий смысл: -lчисло Выполнять команду для каждой группы из заданного числа непустых строк аргументов, прочитанных со стандартного ввода. Последний вызов команды может быть с меньшим числом строк аргументов. Считается, что строка заканчивается первым встретившимся сим волом перевода строки, если только перед ним не стоит пробел или символ табуляции; пробел/табуля- ция в конце сигнализируют о том, что следующая не- пустая строка является продолжением данной. Если число опущено, оно считается равным 1. Опция -l включает опцию -x. -iзам_цеп Режим вставки: команда выполняется для каждой строки стандартного ввода, причем вся строка расс- матривается как один аргумент и подставляется в начальные_аргументы вместо каждого вхождения це- почки символов зам_цеп. Допускается не более 5 на- чальных_аргументов, содержащих одно или несколько вхождений зам_цеп. Пробелы и табуляции в начале вводимых строк отбрасываются. Сформированные аргу- менты не могут быть длиннее 255 символов. Если це- почка зам_цеп не задана, она полагается равной { }. Опция -i включает опцию -x. -nчисло Выполнить команду, используя максимально возможное количество аргументов, прочитанных со стандартного ввода, но не более заданного числа. Будет исполь зовано меньше аргументов, если их общая длина пре- вышает размер (см. ниже опцию -s), или если для последнего вызова их осталось меньше, чем заданное число. Если указана также опция -x, каждая группа из указанного числа аргументов должны укладываться в ограничение размера, иначе выполнение xargs прекращается. -t Режим трассировки: команда и каждый построенны список аргументов перед выполнением заносятся в стандартный протокол. -p Режим с приглашением: xargs перед каждым вызовом команды запрашивает подтверждение. Включается ре- жим трассировки (-t), за счет чего печатается вы- зов команды, который должен быть выполнен, а за ним - приглашение ?.... Ответ y (за которым может идти что угодно) приводит к выполнению команды; при каком-либо другом ответе, включая возврат ка- ретки, данный вызов команды игнорируется. -x Завершить выполнение, если очередной список аргу- ментов оказался длиннее, чем размер (в символах). Опция -x включается опциями -i и -l. Если ни одна из опций -i, -l или -n не указана, общая длина всех аргументов должна укладываться в ограничение размера. -sразмер Максимальный общий размер (в символах) каждого списка аргументов установить равным заданному раз- меру. Размер должен быть положительным числом, не превосходящим 470 (подразумеваемое значение). При выборе размера следует учитывать, что к каждому аргументу добавляется по одному символу; кроме то- го, запоминается число символов в имени команды. -e[лконф_цеп] Цепочка символов лконф_цеп считается признаком ло гического конца файла. Если опция -e не указана, признаком конца считается подчеркивание (_). Опция -e без лконф_цеп аннулирует возможность устанавли- вать логический конец файла (подчеркивание при этом рассматривается как обычный символ). Команда xargs читает стандартный ввод до тех пор, пока не дойдет до конца файла или не встретит цепочку лконф_цеп. Выполнение программы xargs прекращается, если она полу- чает от команды код завершения -1 или если команда н может быть выполнена. Если команда - это shell-програм- ма, она должна явно выполнять exit [см. sh(1)] с соот- ветствующим аргументом, чтобы избежать случайного возв- рата кода -1. ПРИМЕРЫ 1. Следующая shell-процедура пересылает все файлы из каталога $1 в каталог $2 и сообщает о каждой пересылке перед тем, как ее выполнить: |ls $1 | xargs -i -t mv $1/{} $2/{} 2. Следующая команда объединяет вывод команд, заключен ных в скобки, в одну строку, которая затем добавляется в конец файла log: |(logname; date; echo $0 $*) | xargs >>log 3. Пользователя спрашивают, какие файлы из текущего ка- талога должны быть занесены в архив. При выполнении первой команды (см. ниже) файлы заносятся в архив arch по одному; при выполнении второй команды в архив зано- сится сразу много файлов. |ls | xargs -p -l ar r arch |ls | xargs -p -l | xargs ar r arch 4. Следующая shell-процедура применяет команду diff(1) к последовательным парам своих аргументов. |echo $* | xargs -n2 diff СМ. ТАКЖЕ sh(1). ДИАГНОСТИКА Не требует пояснений.