kill não está lendo nada de stdin, mas espera alguns argumentos de linha de comando e lança um erro se não os obtiver.
O encanamento só funciona se o programa no lado direito do tubo estiver realmente lendo do tubo. Nem todos os programas fazem.
Estou brincando com canos para aprender como usá-los.
Eu estou tentando este comando para matar um processo pelo nome: pgrep <some_process> | kill
mas a saída que estou recebendo é a instrução de uso para kill, como se ela não tivesse recebido nenhuma entrada.
é claro que sei que há uma maneira mais fácil de realizar a mesma tarefa como pkill ou killall , mas quero saber por que isso não está funcionando.
Obrigado
kill não está lendo nada de stdin, mas espera alguns argumentos de linha de comando e lança um erro se não os obtiver.
O encanamento só funciona se o programa no lado direito do tubo estiver realmente lendo do tubo. Nem todos os programas fazem.
Como Florian explicou, kill espera entradas de linha de comando.
Para contornar o problema, você pode usar
xargs para criar argumentos de linha de comando para um comando, por exemplo, pgrep vivaldi | xargs kill ou melhor ainda pgrep vivaldi | awk 'BEGIN{ORS=" "} 1' | xargs kill
kill $(pgrep vivaldi)
killall , que faz praticamente o mesmo trabalho que pgrep e kill combinados, por exemplo, killall vivaldi
pkill , outro utilitário para matar com base no nome, por exemplo, pkill vivaldi
Para matar um programa pelo nome, se você realmente souber o nome do processo, basta usar o comando skill <your process name> ;
Agora, para canais, uma boa maneira de entendê-los é brincar com ferramentas como echo , more , less , tail , head etc. Há muitos programas que podem ser lidos um cachimbo ... um que eu sempre usei é grep .