как ждать в фоновом режиме?

Следующая командная строка будет возвращать один пользовательский тег в каждой строке:

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 , чтобы отсеять несколько упоминаний одного и того же тега.

0
16.07.2018, 06:00
2 ответа

Синтаксическая ошибка связана с тем, что и &, и &&являются разделителями команд. &запускает команду в фоновом режиме и немедленно запускает следующую, тогда как &&запускает первую команду, ждет ее завершения и запускает вторую команду, если первая выполнена успешно.

Чтобы создать фон для двух вещей, которые вы хотите запустить асинхронно с третьей вещью, используйте этот шаблон:

( first_thing && second_thing ) &
third_thing

Необязательноwait $!после third_thing, чтобы закончить первые два, прежде чем продолжить.

wait 1ожидает завершения PID 1, что вряд ли произойдет во время работы вашей оболочки. Вам понадобится wait %1, который ожидает спецификация задания 1.

4
28.01.2020, 02:23

Я думаю waitэто не ответ. согласно это , tailявляется лучшим решением. Я должен использовать( tail --pid=WHATEVER -f /dev/null && do whatever ) &

0
28.01.2020, 02:23

Теги

Похожие вопросы