2014-01-23 2 views
1

Я действительно хочу использовать ps -aux, чтобы получить это. Так что я написал сценарий:Написание сценария для поиска всех PID процессов пользователя

#!/bin/bash 
if [ $# -lt 1 ]; then 
     echo -n "No arguments were written" 
     read uid 
else 
     uid=$1 
fi 
procesy=`ps -aux | awk '{if ($1=="$uid") print$2}'` 
echo $procesy 

Почему он не работает? Когда я писаю ./script root Я получаю только пустую строку.

+1

Другой Справка: Читайте о том, как передать переменные в 'awk'. – devnull

+0

Проверьте свою страницу руководства. 'ps' должен уже иметь возможность выводить только идентификаторы процессов, без необходимости отфильтровывать их из полного вывода' ps -aux'. – chepner

+0

Для людей, которые хотят закрыть вопрос, вопрос заключается не в том, как использовать 'awk', если у вас есть решение, которое не использует' awk', не стесняйтесь добавлять. –

ответ

1

В вашем сценарии у вас есть проблемы с помощью переменной оболочки внутри awk. Правильный способ использования awk должно быть что-то вроде:

#!/bin/bash 
if [ $# -lt 1 ]; then 
     echo -n "No arguments were written" 
     read user 
else 
     user=$1 
fi 
procesy=`ps aux | awk -v usr=$user '{if ($1==usr) print$2}'` 
echo $procesy 
+0

Зачем использовать 'awk'? –

+0

@ LoïcFaure-Lacroix Потому что это было в вопросе. Но я знаю, что l0b0's [solution] (http://stackoverflow.com/a/21308393/2353900) лучше. –

3

Это будет делать то, что вам нужно:

pgrep -U $1 
Смежные вопросы