Percebi que |
é usado para enviar resultados do primeiro comando para o outro. Eu gostaria de matar todos os processos que correspondem 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?
pkill
. E se isso não existissekill $(pgrep ...)
,.man pgrep
. O botão de voto negativo diz que é para quando uma pergunta não mostra nenhum esforço de pesquisa e não consegui ver nada na sua pergunta. Desculpe se isso parecia duro.Respostas:
Tente o seguinte:
Se você usar
pgrep name | kill
, a saída depgrep name
é feed para stdin dekill
. Comokill
não lê argumentos do stdin, isso não funcionará.Usando
xargs
, ele criará argumentos para akill
partir do stdin. Exemplo:fonte
Isso deve funcionar:
Sugiro também a leitura da página de manual.
fonte
Para responder ao geral e não ao específico ...
Os tubos são para passar a saída de um programa como entrada para outro programa.
Parece que você está tentando usar a saída de um programa como argumentos de linha de comando para outro programa, o que é diferente.
Para fazer isso, use substituição de comando .
Por exemplo, se você deseja executar
E você tem um comando
pgrep name
que gera5089 5105
Você os junta como
fonte