Век живи - век учись.
Открыл для себя xargs ...
xargs принимает обрабатывает свой стандартный вход (stdin) и передаёт это всё в качестве аргументов команде, указанной в качестве её (xargs) аргумента. Выглядит примерно так:
$ getent passwd | awk -F: '{print $1}' | xargs finger
в результате этой команды будет вызван finger по всем пользователям системы. При чём будет запущен будет только один finger с кучей аргументов, представляющих список пользователей через пробел - да именно через пробел. xargs разделяет поля входного потока по пробелам, табуляциям и переводам строки, и затем передаёт их все finger-у (в данном случае) в качестве аргументов.
Закономерно предположить, что командная строка вполне может переполнится - на этот счёт есть решение: ключик "-L <количество>" - при указании такого параметра xargs запустит команду несколько раз, передавая в качестве аргументов очередное <количество> строк.
Кроме этого она поможет при решении проблемы указанной в недавней записи про проблемы с пробелами в bash. В предложенном решении вместо "for" можно использовать xargs с ключиком "-0" (цифра ноль):
$ cat spaces.txt | xargs -0
str1 str2 str3 str4
str5 str6 str7 str8
str9 str10 str11 str12
Объяснение "-0" и прочие подробности - в "man xargs".
... взял её на вооружение.
Подписаться на:
Комментарии к сообщению (Atom)

Комментариев нет:
Отправить комментарий