2013-12-06 3 views
0

Я хочу, чтобы запустить pstree на множестве PID, который я нахожу с помощью psИспользование pstree внутри команды AWK

ps -aux | grep ^username | awk '{pstree $2}' 

К сожалению, выход пуст, но если я запускаю команду pstree вручную с помощью тех же PIDs я получить желаемый результат. Что не так с командой awk? Или как мне достичь желаемого результата другими способами?

+0

В качестве n в стороне, 'man ps' скажет вам: Обратите внимание, что __" ps-aux "__ отличается от __" ps aux "__. – devnull

+1

'ps -a -u username -x -o pid' должен возвращать тот же результат, что и указанный конвейер (по крайней мере, для BSD' ps', программа сильно варьируется от платформы к платформе). – chepner

+0

Что произойдет, если вы запустите pstree внутри программы C? Я бы предположил, что результат будет идентичным тому, что не будет, поскольку ни awk, ни C не являются оболочкой? –

ответ

1

Использование system функции в AWK следующим образом:

awk '{system("pstree " $2)}' 

Вы можете сократить вашу команду:

ps -aux | awk ' /^username/ { system("pstree " $2) }' 
+0

Отлично! это то, что сработало для меня 'ps -aux | grep^имя пользователя | awk '{system ("pstree" $ 2)}' ' – e271p314

+0

@ e271p314: Вы также можете сократить свою команду, как в моем отредактированном ответе. – anubhava

2

использовать функцию system в awk. Кроме того, вам не нужно grep здесь тоже

ps -aux | awk '$1=="username"{system("pstree $2")}' 
3

Попробуйте

ps -aux | grep ^username | awk '{print $2}' | xargs pstree 

(Как, pstree пустое значение переменной)

Это может быть сводились к

ps -aux | awk '/^username/{print $2}' | xargs pstree 

IHTH

+0

+1 для разделения вызова на 'pstree' от вызова' awk' (который запросил мой комментарий об использовании 'ps' для получения желаемых PID). – chepner

+0

Там вы идете - фактическое решение UNIX с каждой командой, делающей то, для чего оно предназначено, и хорошо! –

+0

Высокая похвала от 2 гуру,: -! Спасибо и удачи всем! – shellter

Смежные вопросы