2013-03-01 2 views

ответ

30

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

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

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

+0

Что делать, еслиМне нужно использовать некоторую $ VARIABLE внутри внутренней оболочки? Он не наследует его по умолчанию. –

+0

Я думаю, что он наследует его. Например: 'export a = abc', а затем используйте 'echo $ a%' вместо 'echo%'. – kamituel

+0

Коллега указал мне, что вы можете передать один вызов xargs другому, что удобно, если у вас есть команда, которая сложнее поставить между одинарными кавычками: 'psql -c" select foo from bar "| xargs -I% sh -c '{echo%; сон 1; } '| xargs -L1 -I {} curl -X POST -H "Content-Type: application/json" -d '{ "код": "123", "foo": "{}" }' https: //myapi.com/baz "' – cdf

0

Заменить echo какой-скрипт с именем sleepecho, содержащего

#!/bin/sh 
sleep 1 
echo $* 
0

Если 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