Erro ao executar Variavel que armazena comandos aninhados

1. Erro ao executar Variavel que armazena comandos aninhados

Vinicius
vafc

(usa Fedora)

Enviado em 08/04/2010 - 14:01h

Estou fazendo um script grande em que logo no início devo ler e filtrar um arquivo ".gz", acontece que os comandos (aninhados pelo PIPE) que uso variam com a necessidade e para não ficar escrevendo todos os comandos várias vezes com a diferença de um comando ou outro comando para cada caso, resolvi concatenar os comandos de acordo com o "if" numa variavel. Só que quando tento executar os comandos na variavel acontecem erros com as opções dos comandos. Como posso resolver ?

Ex. do problema :

$ cmd="zcat $arquivo | grep -i store | awk -F ............"
$ `echo $cmd`
gzip: invalid option -- 'i'
Try `gzip --help' for more information.

Se eu remover o "-i" o problema passa para o próximo comando,...


Alguma idéia ?


  


2. Re: Erro ao executar Variavel que armazena comandos aninhados

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 08/04/2010 - 14:22h

Coloque todo o código ae pra gente v...


3. Re: Erro ao executar Variavel que armazena comandos aninhados

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 08/04/2010 - 15:15h

Tente aí:

$ cmd="zcat $arquivo | grep -i store | awk -F ............"
$ eval $cmd

t+


4. Re: Erro ao executar Variavel que armazena comandos aninhados

Vinicius
vafc

(usa Fedora)

Enviado em 08/04/2010 - 16:01h

O código que dei era apenas um exemplo, o real é este :

zcat $arquivo | grep -i "Production Assembly Thread" | grep -i "storing" | awk -F " " '{print $1 " " $14 " " $16}' | sed s/"\],"/""/g | sed s/"\["/""/g > dSWAP
fi

Sendo que quando coloco na variavel tenho que usar o caracter "\" e fica :

c="zcat \$arquivo | grep -i \"Production Assembly Thread\" | grep -i \"storing\" | awk -F \" \" '{print \$1 \" \" \$14 \" \" \$16}' | sed s/\"\],\"/\"\"/g | sed s/\"\[\"/\"\"/g"


Antes já haviam duas condicões e eu tratava reescrevendo os comandos acima para cada situação, apenas com a diferença, o que já era demasiado ruim. Mas surgiu a necessidade de usar outrõs "IFs". Então o correto seria concatenar uma variavel de acordo com a necessidade e depois executá-la antes de continuar o restante do script.

`echo $c`

Mas acontecem erros com as opções dos comandos.


5. Re: Erro ao executar Variavel que armazena comandos aninhados

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 08/04/2010 - 16:01h

Da forma que você fez, parece que o shell interpreta o restante da linha como parâmetro do comando inicial. Assim o '|', grep, -i, store, '|', awk e -F, são tratados como nomes de arquivos pelo gzip (Exceto -i e -F que são vistos como opções)

Faça um teste com o comando eval que te passei e diga se funcionou.

t+


6. Re: Erro ao executar Variavel que armazena comandos aninhados

Vinicius
vafc

(usa Fedora)

Enviado em 08/04/2010 - 16:05h

Acho q o EVAL vai funcionar, só que vou só poder testar mais tarde.



7. Re: Erro ao executar Variavel que armazena comandos aninhados

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/04/2010 - 00:00h

Faz assim:

# os comandos
cmd='cmd="zcat $arquivo | grep -i store | awk -F ............';

# escreve uma funcão num arquivo
echo -e "_nome_de_funcao(){\n$cmd\n}\n" >arquivo.func

# carrega arquivo na memoria
source arquivo.func ||
. arquivo.func

# executa os comandos do arquivo onde você chamar
# no seu código
# a função pelo nome dado
_nome_de_funcao;

Nota: não é necessário dar permissão de execução para o arquivo.

Pronto???




8. Para screver menos

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/04/2010 - 00:34h

_funcao(){
arquivo=$1
zcat $arquivo | grep -i "Production Assembly Thread" | grep -i "storing" | awk -F " " '{print $1 " " $14 " " $16}' | sed s/"\],"/""/g | sed s/"\["/""/g > dSWAP
}

if [ ....
_funcao [arquivo]

fi






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts