shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Variáveis como agumentos de um comando


From: William Marques
Subject: Re: [shell-script] Variáveis como agumentos de um comando
Date: Wed, 23 Nov 2005 16:15:41 -0200
User-agent: Mozilla Thunderbird 1.0.6 (X11/20050716)

Bem, como eu havia prometido, segue o script para quem quiser usar, já resolvido.

O problema era o retorno de linha mesmo.

#!/bin/bash
# Script para treinar o dspam
# Para cada caixa postal com um folder [Ss]pam ou [Jj]unk, processar todas as mensagens for USUARIO in `ls -l /var/spool/cyrus/mail/user/ |awk '{ print$9 } '|awk -F / '{ print $1 } '`
do
USUARIO2=`echo $USUARIO | tr ^ \.`
if [ -d /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/ ]
then
for spam in `ls -l /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/ | awk '{ print$9}' |grep -v cyrus`
    do
#    set -x
ASSINATURA=`cat /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/$spam | grep X-DSPAM-Signature |awk '{ print$2 } '| sed 's/\x0D$//'`
#echo $ASSINATURA
su - cyrus -c "cat /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/$spam | /usr/local/bin/dspam --user $USUARIO2 --source=error --class=spam --signature=$ASSINATURA"
#    set +x
    done

   elif [ -d /var/spool/cyrus/mail/user/${USUARIO}/[Jj]unk/ ]
       then
for spam in `ls -l /var/spool/cyrus/mail/user/${USUARIO}/[Jj]unk/ | awk '{ print$9}' |grep -v cyrus`
    do
ASSINATURA2=`cat /var/spool/cyrus/mail/user/${USUARIO}/[Jj]unk/$spam | grep X-DSPAM-Signature |awk '{print$2} '| sed 's/\x0D$//'` su - cyrus -c "cat /var/spool/cyrus/mail/user/${USUARIO}/[Jj]unk/$spam | /usr/local/bin/dspam --source=error --class=spam --user $USUARIO2 --signature=$ASSINATURA2"
    done
fi
done


Abraços a todos e obrigado pela ajuda.
PS> o sed peguei aqui na lista mesmo, obrigado Alain, estava no seu script para conversão de cp850 para utf8.

--
William Henrique Siqueira Marques
LPIC-1: LPI000058633
address@hidden




William Marques escreveu:

Tiago,


Realmente não funciona de forma alguma.

Segue o script comentado, e o que ocorre na execução:
#!/bin/bash
# Script para treinar o dspam
# Para cada caixa postal com um folder [Ss]pam ou [Jj]unk, processar todas as mensagens

for USUARIO in `ls -l /var/spool/cyrus/mail/user/ |awk '{ print$9 } '|awk -F / '{ print $1 } '`
do
# traduz o suário para a forma como o cyrus acesse no sistema de arquivos (usuario^dominio^com^br

USUARIO2=`echo $USUARIO | tr ^ \.`
# Se existir a pasta, processa:

if [ -d /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/ ]
then
for spam in `ls -l /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/ | awk '{ print$9}' |grep -v cyrus`
    do
#Pega a assinatura do dspam no header da mensagem:

ASSINATURA=`cat /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/$spam | grep X-DSPAM-Signature |awk '{ print$2 } '` # Treina o sistema, inforamndo que ele não classificou uma mensagem que era SPAM: cat /var/spool/cyrus/mail/user/${USUARIO}/[Ss]pam/$spam | /usr/local/bin/dspam \
--user $USUARIO --source=error --class=spam --signature=${ASSINATURA}
done
fi
done

Resultado:
+ set +x
++ cat '/var/spool/cyrus/mail/user/william^scinergy^com^br/Spam/38.'
++ grep X-DSPAM-Signature
++ awk '{ print$2 } '
+ ASSINATURA=1,4383802f47401749117612
+ cat '/var/spool/cyrus/mail/user/william^scinergy^com^br/Spam/38.'
+ /usr/local/bin/dspam --user 'william^scinergy^com^br' --source=error --class=spam $'--signature=1,4383802f47401749117612\r' ' failed11/23/2005 12:31:47] Signature retrieval for '1,4383802f47401749117612
26601: [11/23/2005 12:31:47] Unable to find a valid signature. Aborting.
26601: [11/23/2005 12:31:47] process_message returned error -5. dropping message

Se faço na mão o seguinte, que é a expansão de todas as variáveis, funciona:
cat /var/spool/cyrus/mail/user/william^scinergy^com^br/Spam/37.| /usr/local/bin/dspam --user william.scinergy.com.br --source=error --class=spam --signature=1,43835c16324461804284693

Rapaz, de tirar os cabelos!

Todas as alternativas que sugeristes, não deram resultado. Um palpite que me ocorreu aqui nesse exato momento que estou escrevendo este e-mail foi quanto ao \n no final da assinatura....

Vou removelo e testar, e posto daqui a pouco na lista.

Obrigado, de antemão!
Tiago Barcellos Peczenyj escreveu:

Tche, olhando bem o teu script eu fiz o seguinte

$ dspam() { echo $1 ; }
$ dspam --signature=${PATH}
dspam --signature=/bin:/etc:/sbin:/usr/bin:/usr/bin/X11

Na boa, não acho que o teu erro seja este, se vc tem certeza, experimente
algo assim
$ CMD='dspam --signature='
$ CMD=${CMD}${VARIAVEL}
$ echo $CMD  && eval $CMD


[]´s Tiago
Em 22/11/05, William Marques <address@hidden> escreveu:


Tiago,

Já proteger de tudo quanto é forma possível, e já tentei fazer um
"bacalhau" também que não funcionou:
inserir uma variável dessa forma:
var2="--signature=$assinatura", e daí passar na linha de comando dspam
$var2, o que resulta exatamente no mesmo erro já dito anteriormente.
Se eu faço assim:
var2="--signature=12345566" (Que seria um valor da assinatura do arquivo
em questao dentro do laço for), daí funciona, como seria de se esperar,
afinal de contas isso dá na mesma do que passar o valor na mão na linha
de comando para o software... mas assim não tem jeito né, cada arquivo
tem uma assinatura diferente!
O que eu queria é impedir o bash de utilizar o formato string=valor para
carregar uma variável, somente nessa linha... algo do gênero se
--string=valor, entao isso nao é uma variável, será impossível isso?


Esse scriptzinho que estou criando é para um antispam, de gorma a
alimentar o software com falsos-positivos e falsos negativos, lendo as
mensagens diretamente da pasta imap dos usuários. O software na teoria
nem precisaria desse valor de assinatura, mas somente está funcionando
se eu passo o valor da assinatura... Posso colocar o script aqui depois
de pronto se alguem precisar, bem como passar minha documentação da
instalação em PVT a quem quiser... Odeio SPAM!

De qualquer forma obrigado pela resposta.



Tiago Barcellos Peczenyj escreveu:

Vc ja experimentou proteger a variavel, colocando-a entre aspas ?

Em 22/11/05, William Marques <address@hidden> escreveu:


Pessoal,

Estou criando um shell script para pegar algumas informações de um
arquivo e passá-las como argumentos para um programa.
Funciona assim:
var1=`cat arquivo | grep assinatura|grep ' { print$2 } '`

Depois tenho que passar na linha de comando essa variável, mas daí dá
erro:

dspam --signature=$var1

O que ocorre é que o bash está pensando que --signature será uma nova
variável, e quer inseri-la em --signature:
set -x
dspam --signature=$var1
$'--signature=1,43835c16324461804284693\r'
Unable to find a valid signature. Aborting.

Bom, o caso aqui realmente não é o software em si, pois funciona
perfeitamente se eu passar na mão o valor da variável var1.

Alguém tem idéias de como evitar isso? Nenhuma proteçao da variável,
seja com "", {} funciona.

Abraços a todos!

--
William Henrique Siqueira Marques
LPIC-1: LPI000058633
address@hidden




---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação,
como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem
prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------



*Yahoo! Grupos, um serviço oferecido por:*  PUBLICIDADE
<
http://br.rd.yahoo.com/SIG=12fhtvgt7/M=365837.7000707.7924794.2369893/D=brclubs/S=2137111254:HM/Y=BR/EXP=1132693265/A=2950750/R=2/id=noscript/SIG=10tift5qr/*http://br.movies.yahoo.com/
------------------------------
*Links do Yahoo! Grupos*

- Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
- Para sair deste grupo, envie um e-mail para:
address@hidden<
address@hidden?subject=Unsubscribe>
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.




[As partes desta mensagem que não continham texto foram removidas]



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação,
como perl, C etc. Quem insistir em não seguir esta regra será moderado sem
prévio aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------

Links do Yahoo! Grupos









--
William Henrique Siqueira Marques
LPIC-1: LPI000058633
address@hidden




---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------



*Yahoo! Grupos, um serviço oferecido por:*  PUBLICIDADE
<http://br.rd.yahoo.com/SIG=12f33q5t1/M=365837.7000707.7924794.2369893/D=brclubs/S=2137111254:HM/Y=BR/EXP=1132698266/A=2950750/R=2/id=noscript/SIG=10tift5qr/*http://br.movies.yahoo.com/>
------------------------------
*Links do Yahoo! Grupos*

 - Para visitar o site do seu grupo na web, acesse:
 http://br.groups.yahoo.com/group/shell-script/

 - Para sair deste grupo, envie um e-mail para:
 address@hidden<address@hidden?subject=Unsubscribe>

 - O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
 Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.


[As partes desta mensagem que não continham texto foram removidas]



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------

Links do Yahoo! Grupos
















reply via email to

[Prev in Thread] Current Thread [Next in Thread]