Как спать в течение 1 секунды между каждой командой xargs?

Например, если я выполняю

ps aux | awk '{print $1}' | xargs -I {} echo {}

Я хочу, чтобы оболочка спала в течение 1 секунды между каждым echo.

Как я могу изменить команду оболочки?

Ответ 1

Вы можете использовать следующий синтаксис:

ps aux | awk '{print $1}' | xargs -I % sh -c '{ echo %; sleep 1; }'

Будьте осторожны с пробелами и точками с запятой. После каждой команды между скобками требуется точка с запятой (даже после последней).

Ответ 2

Замените echo на некоторую оболочку script с именем sleepecho, содержащую

 #!/bin/sh
 sleep 1
 echo $*

Ответ 3

Если ваш awk поддерживает его:

ps aux | awk '{ system("sleep 1"); print $1 }' | xargs -I {} echo {}q

или пропустите awk и xargs вообще

ps aux | while read -r user rest;
    echo $user
    sleep 1;
done