Следующая командная строка будет возвращать один пользовательский тег в каждой строке:
aptitude show '~T' | sed -n '/^User Tags: /{s/^User Tags: //;s/, /\n/g;p}' | sort -u
Это будет передавать информацию обо всех пакетах в базе данных пакетов ( ~ T
) в sed, который:
-n
не будет печатать пространство шаблонов (строку) автоматически после каждого командного цикла; вместе с / User Tags /
и p
он в основном имитирует grep / ^ User Tags: /
выполняет только группу команд ( {}
) в строках, соответствующих этому регулярному выражению s / ^ User Tags: //
замените «User Tags:» в начале строки на пустую строку s /, / \ n /
запятая подстановки + пробел, разделяющий несколько пользовательских тегов с символом новой строки p
, выводит результат восстановления пространства шаблонов sed (пользовательские теги ] для каждого пакета, по одному в строке) затем передается в sort -u
, чтобы отсеять несколько упоминаний одного и того же тега.
Синтаксическая ошибка связана с тем, что и &
, и &&
являются разделителями команд. &
запускает команду в фоновом режиме и немедленно запускает следующую, тогда как &&
запускает первую команду, ждет ее завершения и запускает вторую команду, если первая выполнена успешно.
Чтобы создать фон для двух вещей, которые вы хотите запустить асинхронно с третьей вещью, используйте этот шаблон:
( first_thing && second_thing ) &
third_thing
Необязательноwait $!
после third_thing
, чтобы закончить первые два, прежде чем продолжить.
wait 1
ожидает завершения PID 1, что вряд ли произойдет во время работы вашей оболочки. Вам понадобится wait %1
, который ожидает спецификация задания 1.