Существует ли более изящная команда жемчуга для этого?
ps -ejH | grep 'bash' | head -1 | perl -E ' if( <> =~ /(bash)/) {say $1}'
Я просто хочу echo
PID, который является первой группой символов.
Поверните Perl autosplit
на. Это разделяет строки на массив @F
(на пробеле), таким образом, $F[0]
содержит первый столбец.
ps -ejH | perl -a -E 'if (/bash/) {say $F[0]; last;}'
Можно также избавиться от grep
и head
команды, потому что захват является вещью Perl, могут сделать довольно хороший.
head
может быть заменен вызовом к last
который повреждает неявное while(<>){...}
цикл, наложенный -a
переключатель. На более старом Perls (перед v5.20) Вам, возможно, также понадобилось бы -n
переключитесь, но в наше время -a
подразумевает -n
.
Хотя я люблю Perl, я сделал бы этот конкретный с awk
:
ps -ejH | awk '/bash/ {print $1; exit}'
Мы можем также использовать sed
ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'
ps -ejH | perl -n0E 'say /(\d+).*bash/'
или
pgrep bash | tail -1