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 $( )
.