2017-02-19 3 views
0

Я использую Ubuntu и bash shell.Bash shell, получающий только PID от PS не работает

Я не могу понять, почему следующая команда возвращает всю строку вместо только PID с:

$ ps -ef | awk "{print $2}" | head -3 
UID  PID PPID C STIME TTY   TIME CMD 
root   1  0 0 feb18 ?  00:00:32 /sbin/init splash 
root   2  0 0 feb18 ?  00:00:00 [kthreadd] 

Любые предложения?

+0

Stack Overflow является сайт для вопросов программирования и развития. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

+0

@jww: Я думаю, что этот вопрос может считаться вопросом программирования. Речь идет о одном утверждении, которое также может быть частью скрипта. Задавая вопросы о работе программной инструкции, IMHO, покрывается Stack Overflow. – user1934428

ответ

5

Это проблема с цитированием оболочки. Если в двойных кавычках оболочка расширяет «$ 2» до пустой строки, потому что она не установлена. Это оставляет awk '{print }', который распечатает всю строку.

Используйте одинарные кавычки, чтобы предотвратить расширение:

ps -ef | awk '{print $2}' | head -3 

Btw, вы можете использовать команду ps, чтобы получить идентификатор процесса, awk не требуется для этого:

ps -efho pid 
Смежные вопросы