Variavel nao armazena saida de comando [RESOLVIDO]

1. Variavel nao armazena saida de comando [RESOLVIDO]

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 27/09/2013 - 09:56h

Olá caros amigos.

Preciso fazer um pequeno script para matar o processo do TCPDUMP e não estou conseguindo faze-lo.

O problema é que a saida do comando (a saida do comando é o PID do tcpdump) não é armazenada na variavel

Segue o script....

#!/bin/bash

while true
do

tcpdump -i eth0 -n net 192.168.0.0/16

sleep 10

num_pid= ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'

kill -9 $num_pid

sleep 10


done

É simples, inicio o tcpdump fazendo a captura durante 10 segundos, após isso quero mata-lo, esperar mais 10 segundos e inicia o processo novamente.

O que acontece é que a saida do comando: ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}' não fica armazenada na variavel num_pid.

Ja tentei de varias formas...
Com aspas:

num_pid= 'ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}''

Aspas duplas

num_pid= "ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'"

e sem as aspas como esta no script completo.

Sem o uso das aspas, ou seja, como esta no algoritmo completo eu consigo ver o PID sendo impresso no terminal, mas dai da erro no comando kill -9 dizendo justamente que ele nao sabe o que matar, pois o pid parece nao ficar armazenado na variavel.



  


2. MELHOR RESPOSTA

Diego Lepera
d_lepera

(usa Linux Mint)

Enviado em 27/09/2013 - 10:23h

DESCOBRIIIIII!!!!

O problema está no espaço em branco que você está deixando entre o = e o valor!!!

Tente exatamente assim: num_pid=`ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'`
Sem o espaço :D


3. Re: Variavel nao armazena saida de comando [RESOLVIDO]

Diego Lepera
d_lepera

(usa Linux Mint)

Enviado em 27/09/2013 - 10:03h

Nesse caso você não usa nem a aspa simples e nem a dupla e sim a crase (acento invertido)
num_pid=`ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'`

Isso significa que você quer armazenar na variável o retorno dos comando presentes dentro das crases.



4. Re: Variavel nao armazena saida de comando [RESOLVIDO]

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 27/09/2013 - 10:11h

Olá amigo, obrigado pela resposta, fiz como recomendado mas tambem não funcionou...

num_pid= `ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'`

kill -9 $num_pid


5. Re: Variavel nao armazena saida de comando [RESOLVIDO]

Diego Lepera
d_lepera

(usa Linux Mint)

Enviado em 27/09/2013 - 10:20h

cara, que estranho!

Pois fiz o teste aqui (no meu caso com o evolution):
$ num_pid=`ps -ef | grep "evolution" | grep -v "grep" | awk '{print $2}'`; kill -9 $num_pid

E deu certo rsrsrs tenta fazer o mesmo, com o tcpdump por fora do script... talvez apareça algo que possa te ajudar ;)


6. Re: Variavel nao armazena saida de comando [RESOLVIDO]

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 27/09/2013 - 10:27h

Se eu executar diretamente no terminal o comando


ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'

Ele retorna certo o numero do PID que nesse momento é 8737

Ai quando dou um kill -9 8737

Tambem diretamente no terminal ele funciona, mata o processo.

Mas quando tento em um arquivo shell script, quando rodo o comando tenho:

sh teste.sh
teste.sh: 11: teste.sh: 8737: not found
teste.sh: 13: kill: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or
kill -l [exitstatus]


Note que ele ate aparece o PID mas nao encerra, retornando a mensagem do Kill

Nesse exato momento o script esta assim:


#!/bin/bash

while true
do

tcpdump -i eth0 -n net 192.168.0.0/16

sleep 10

num_pid= `ps -ef | grep "tcpdump" | grep -v "grep" | awk '{print $2}'`

kill -9 $num_pid

sleep 10
done


7. Re: Variavel nao armazena saida de comando [RESOLVIDO]

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 27/09/2013 - 10:30h

Opaaaa, desculpa, estava escrevendo no momento em que voce descobriu e postou a solução...

Agora sim, exatamente isso se eu retirar o espaço funciona perfeitamente bem....

Muito obrigado pela ajuda amigo






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts