ps output difere quando executado a partir da linha de comando e do script

2

Eu tenho que criar uma lista de PIDs dos processos em execução.

Aqui está o script

ps
echo "fields are "
ps | cut -d' ' -f1

ps está sendo exibido

  PID TTY          TIME CMD
 2168 pts/4    00:00:00 sh
 2177 pts/4    00:00:00 mailx
 5191 pts/4    00:00:00 sh
 6494 pts/4    00:00:00 sh
 6495 pts/4    00:00:00 ps
12154 pts/4    00:00:00 sh
12172 pts/4    00:00:00 mailx
15618 pts/4    00:00:00 bash

Mas a saída do pipeline de corte é apenas

12154
12172
15618
    
por Aditya 12.09.2013 / 12:27

3 respostas

5

O problema é que cut usa um caractere de espaço único como um delimitador, mas como o nome da coluna e os PIDs de 4 dígitos estão alinhados à direita, há vários espaços à esquerda que fazem com que cut imprima uma linha vazia. p>

Uma abordagem alternativa é usar awk , que lida melhor com esse tipo de entrada:

ps | awk '{ print $1 }'

No caso de ps em particular, mindthemonkey resposta é uma abordagem melhor.

    
por 12.09.2013 / 12:34
2

Para a lista completa:

ps -eo pid

Ou apenas seus processos:

ps -o pid
    
por 12.09.2013 / 12:34
0

Como terceira opção, você também pode usar grep :

ps | grep -oP '^\s*\d+'

O -P ativa expressões regulares Perl (para \s , \d e + ) e a -o faz com que grep imprima apenas a seção correspondente pf de linhas correspondentes.

    
por 12.09.2013 / 16:28

Tags