LINUX.ORG.RU
ФорумAdmin

Вопросы по xargs во FreeBSD

 


0

2

Как с помощью xargs преобразовать вывод:

krita-5.1.5_5                      <   needs updating (index has 5.1.5_6)
opencolorio-2.1.3                  <   needs updating (index has 2.1.3_1)

в вывод pkg info -r krita opencolorio:

krita-5.1.5_5:
opencolorio-2.1.3_1:
	krita-5.1.5_5

То есть идея такая: нужно отследить, какие зависимые пакеты могут быть затронуты при возможном обновлении.

★★★★★

Никак. В первом выводе нет информации о зависимостях, во втором есть. В первом информация (если я правильно понимаю) берется из текущих версий пакетов в системе, во втором - из метаданных пакетов, где указаны зависимости.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Первый вывод — это фактически таблица из трёх столбцов.

Нужно выделить названия пакетов из первого столбца первого вывода в список и построить по нему дерево (простое) соседних зависимостей. Возможно ли применение команд форматирования или регулярных выражений для xarg, если используется pipe («|») первого вывода??

iZEN ★★★★★
() автор топика
Ответ на: комментарий от iZEN

В общем, получилось:

cd /usr/ports/ && portsnap fetch update && pkg version -vIL = | grep "<" | colrm 35 | xargs pkg info -r

— выводит список пакетов, нуждающиеся в обновлении, с зависимыми от них пакетами, которые могут перестать работать, если и их не обновить.

Колонка 35, после которой первый вывод не нужен, найдена опытным путём.

iZEN ★★★★★
() автор топика
Ответ на: комментарий от iZEN

xargs выполняет переданную ему команду отдельно для каждой строки. Команда может быть любой, можно с регулярными выражениями и с форматированием - xargs’у на это просто наплевать, он просто подставляет строки в шаблон команды.

Для решения такой задачи лучше подошел бы инструмент, не обрабатывающий каждую строку раздельно, а позволяющий иметь общее состояние - например скрипт на awk или perl. Но нужно будет сформулировать алгоритм преобразования списка в дерево

annulen ★★★★★
()
# pkg version -vIL = 
bash-5.2.12                        <   needs updating (index has 5.2.15)
beats7-7.17.7                      <   needs updating (index has 7.17.9_2)
binutils-2.39,1                    <   needs updating (index has 2.40,1)
cmake-core-3.24.3_2                <   needs updating (index has 3.25.1)

# pkg version -vIL = | awk '{system("pkg info -rq "$1)}'
bash-completion-2.11_2,2
debootstrap-1.0.128
wireguard-tools-1.0.20210914_1
xmlto-0.0.28
gcc11-11.3.0_5

Пересобрать все зависимости, которые потащат за собой обновления родителя:

pkg version -vIL = | awk '{system("pkg info -rq "$1)}' | xargs portmaster

iron ★★★★★
()
Последнее исправление: iron (всего исправлений: 1)