Posso encadear pgrep com kill?

Posso encadear pgrep com kill?

Percebi que |é usado para enviar resultados do primeiro comando para o outro. Gostaria de eliminar todos os processos que correspondam a um nome.
Isto é o que o pgrep normalmente faz:

$ pgrep name
5089
5105

E vários argumentos parecem funcionar com kill:

sudo kill 5089 5105

Mas isso está errado:

pgrep name | kill

Então, como fazer isso corretamente?

Responder1

Experimente isto:

pgrep name | xargs kill

Se você usar pgrep name | kill, a saída pgrep nameserá alimentada para stdin de kill. Porque killnão lê argumentos do stdin, então isso não funcionará.

Usando xargs, ele construirá argumentos para killstdin. Exemplo:

$ pgrep bash | xargs echo
5514 22298 23079

Responder2

Isso deve funcionar:

pkill name

Também sugiro a leitura da página de manual.

Responder3

Para responder ao geral e não ao específico...

Pipes servem para passar a saída de um programa comoentradapara outro programa.

Parece que você está tentando usar a saída de um programa comoargumentos de linha de comandopara outro programa, que é diferente.

Para fazer isso, usesubstituição de comando.

Por exemplo, se você quiser executar

sudo kill 5089 5105

E você tem um comando pgrep nameque gera5089 5105

Você os coloca juntos como

sudo kill $(pgrep name)

informação relacionada