Você está correto de que | alimenta a saída de um programa para outro. Os dados fluem left para right . Então você pode pensar que
pgrep dnsspoof | kill
deve funcionar, pois pgrep encontrará o número do processo de dnsspoof e alimentará esse valor em kill , o que o mataria. Acontece que isso não funciona, já que o kill só olha para a linha de comando para matar as coisas.
Portanto, temos que obter a saída de pgrep na linha de comando. Isso é o que
%código%
ou o mais moderno 'pgrep dnsspoof' , ele executa o comando dentro dos backticks ou colchetes e coloca a saída no lugar do comando. Portanto, se $(pgrep dnsspoof) produzir pgrep dnsspoof , o comando executado será 5432 , que é a maneira correta de chamar o programa kill.
Usar kill 5432 tem várias vantagens, é mais fácil aninhar, menos coisas precisam ser escapadas, então se o seu shell suportar, então você deve usá-las em preferência para $( ) .