3

Как мне сразу выполнить команду для каждой строки стандартного stdin ?

Пример:

(echo abc; sleep 10; echo def;) | ???

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

2 ответа2

2

Используя GNU Parallel:

(echo abc; sleep 10; echo def;sleep 10; echo def;)|parallel -uj1

-u требуется, чтобы получить вывод немедленно. Без команды будет работать, но вывод будет напечатан только позже.

-j1 заставляет запустить один рабочий участок. Если оставить его, GNU Parallel прочитает n заданий перед запуском, где n = количество ядер.

1

Используя скрипт оболочки, предложенный @Hennes:

long_running_command | (
  while read -r LINE; do
    echo $LINE;
    command_to_execute "$LINE";
  done;
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .