Por que wc obtém resultado errado com a saída do ps

1

Para enviar todas as linhas para um arquivo /tmp/ps.txt

$ ps -e >/tmp/ps.txt    

Para contá-lo com wc -l

$ wc -l /tmp/ps.txt
172

Para contá-lo sem exportar um arquivo.

$ ps -e | wc -l
173

Por que ps -e | wc -l recebe mais uma linha?

Eu não acho que ctrl-d tenha a explicação correta para minha pergunta.

$ echo "test" | wc -l
1

Por favor, tente em seu terminal, que renderia 2 como ctrl-d diria .

    
por it_is_a_literature 10.01.2017 / 03:06

2 respostas

3

A resposta da ctrl-d está correta.

Você parece não ter entendido o que o comando ps é para . Ele lista processos em seu sistema.

Quando você executa o comando ps , essa instância em execução em si é um processo.

Quando você executa o comando wc , isso também é um processo.

Se você colocar alguns comandos cat no pipeline, cada um deles também será um processo e cada um deles fará com que ps produza mais uma linha de informações:

[vagrant@localhost ~]$ ps | wc -l
4
[vagrant@localhost ~]$ ps | cat | wc -l
5
[vagrant@localhost ~]$ ps | cat | cat | wc -l
6
[vagrant@localhost ~]$ ps | wc -l
4
[vagrant@localhost ~]$ ps
  PID TTY          TIME CMD
22912 pts/0    00:00:00 bash
29651 pts/0    00:00:00 ps
[vagrant@localhost ~]$ 

O fato de echo "test" | wc -l exibir "1" é totalmente irrelevante.

    
por 10.01.2017 / 03:56
11

A linha extra é o programa wc que está sendo executado. É executado ao mesmo tempo que ps, não depois disso.

    
por 10.01.2017 / 03:11

Tags