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 name
será alimentada para stdin de kill
. Porque kill
não lê argumentos do stdin, então isso não funcionará.
Usando xargs
, ele construirá argumentos para kill
stdin. 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 name
que gera5089 5105
Você os coloca juntos como
sudo kill $(pgrep name)