Подождите, пока подошвы Bash

Я подключаю один и тот же контент к нескольким командам с помощью tee , subshells и redirects следующим образом:

 #!/usr/bin/env bash echo 'hello' | tee \ >( sleep 3; cat /dev/stdin ) \ >( sleep 2; cat /dev/stdin ) \ >( sleep 1; cat /dev/stdin ) wait # Doesn't work :( 

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

 $ ./test.sh hello $ hello hello hello 

Как правильно подождать подоболочек?

One Solution collect form web for “Подождите, пока подошвы Bash”

В bash вы не можете ждать замены процесса. В:

 cmd1 > >(cmd2) 

вся команда завершается, как только cmd1 заканчивается, независимо от состояния cmd2 .

Вы должны реализовать механизм, чтобы сигнализировать родительский процесс, который cmd2 . Простым способом, используя fifo:

 #!/usr/bin/env bash trap 'rm wait.fifo' EXIT mkfifo wait.fifo echo 'hello' | tee \ >( sleep 3; cat /dev/stdin; : >wait.fifo ) \ >( sleep 2; cat /dev/stdin; : >wait.fifo ) \ >( sleep 1; cat /dev/stdin; : >wait.fifo ) for (( i=0;i<3;i++ )); do read <wait.fifo; done 
  • Найти и заменить с помощью sed с помощью подстановочных знаков при поиске и замене
  • Область переменных в while-read-loop на Solaris
  • Я хочу сравнить два списка и распечатать вывод разности из списка 1
  • Разделить входной файл на X частей общего количества строк / X
  • Получить последнее значение переменной среды - это сценарий оболочки bash
  • Нужна команда для отображения эха «успех»
  • почему ! символ, используемый в сценариях оболочки
  • Удалить строку с пробелами и цитатами из xml-файла
  • Как проверить, является ли введенная переменная буквенно-цифровой или нет в ksh?
  • Текстовые файлы, содержащие свое имя
  • Условия внутреннего контура должны зависеть от хода внешнего цикла
  • Дата «1 месяц назад» не работает в AIX
  • Linux и Unix - лучшая ОС в мире.