Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

1. Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 29/11/2016 - 17:42h

Prezados,

Como posso resolver a seguinte situação. Preciso implementar um script em shell que utilize um comando for dinâmico o qual pode ser armazenado em uma variável, tal como segue a seguir (desculpem mas o exemplo é bem chulo mas é apenas para exemplificar o que preciso):

Script.sh

##Inicio
.
.
.
DIR1=/home/user1
DIR2=/home/user2
x=1
if [ $x = 1 ];then
FOR_DINAMICO='for i in `ls $DIR1`;do'
else
FOR_DINAMICO='for i in `ls $DIR2`;do'
fi

`$FOR_DINAMICO`
###restante do código aqui
do


No script que tento executar a parte do for está como acima, no entanto não funciona. Alguma sugestão?


  


2. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/11/2016 - 17:47h

Sem analisar todo o script:

FOR_DINAMICO='for i in `ls $DIR1`;do'

Isto não funciona porque está com aspas simples.
Aspas simples não substituem o nome da variável pelo seu conteúdo.
Use aspas duplas.

Não tenho certeza se as variáveis serão repassadas com subshell.
Se não forem, só exportando-as com export.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 29/11/2016 - 18:15h

Com aspas duplas também não funcionou, abaixo deixo mais um script de exemplo, mas reforço que TEM de funcionar dessa maneira, ou seja, com o início do comando for armazenado em variável (exceto o final dele) então chamando a variável inicia-se o for:

Script.sh
#!/bin/bash
DIR1=/home/user1
DIR2=/home/user2
echo -e "Escolha Uma das Opcoes:\n\n1)Listar Conteudo do Diretorio 1/n2)Listar Conteudo do Diretorio 2";
read op;
case op in
1) FOR_DINAMICO="for i in `ls $DIR1`;do" ;
;;
2) FOR_DINAMICO="for i in `ls $DIR2`;do" ;
;;
esac

`$FOR_DINAMICO`
echo $i;
done



4. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/11/2016 - 18:34h

mlgrassi escreveu:

Com aspas duplas também não funcionou, abaixo deixo mais um script de exemplo, mas reforço que TEM de funcionar dessa maneira, ou seja, com o início do comando for armazenado em variável (exceto o final dele) então chamando a variável inicia-se o for:

Script.sh
#!/bin/bash
DIR1=/home/user1
DIR2=/home/user2
echo -e "Escolha Uma das Opcoes:\n\n1)Listar Conteudo do Diretorio 1/n2)Listar Conteudo do Diretorio 2";
read op;
case op in
1) FOR_DINAMICO="for i in `ls $DIR1`;do" ;
;;
2) FOR_DINAMICO="for i in `ls $DIR2`;do" ;
;;
esac

`$FOR_DINAMICO`
echo $i;
done


Não é melhor usar array?

DIR[1]="..."
DIR[2]="..."

read "Escolha 1 ou 2" op

for i in `ls ${DIR[$op]}`
do
...
done


É mais ou menos isto.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 29/11/2016 - 18:38h

Não.


6. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/11/2016 - 18:42h

mlgrassi escreveu:

Prezados,

Como posso resolver a seguinte situação. Preciso implementar um script em shell que utilize um comando for dinâmico o qual pode ser armazenado em uma variável, tal como segue a seguir (desculpem mas o exemplo é bem chulo mas é apenas para exemplificar o que preciso):

Script.sh

##Inicio
.
.
.
DIR1=/home/user1
DIR2=/home/user2
x=1
if [ $x = 1 ];then
FOR_DINAMICO='for i in `ls $DIR1`;do'
else
FOR_DINAMICO='for i in `ls $DIR2`;do'
fi

`$FOR_DINAMICO`
###restante do código aqui
do


No script que tento executar a parte do for está como acima, no entanto não funciona. Alguma sugestão?



Boa tarde.
Vc quer incluir o CONTEúDO de "ls $DIR1" ou "ls $DIR12 na VAR "FOR_DINAMICO", é isso?
Marcelo oliver



7. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 30/11/2016 - 10:33h

Não, eu quero armazenar o comando for inteiro sem o done e chamar ele pela variável.


8. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Perfil removido
removido

(usa Nenhuma)

Enviado em 30/11/2016 - 11:03h

Já tentou incluir done na variável apenas por desencargo?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Paulo
paulo1205

(usa Ubuntu)

Enviado em 30/11/2016 - 11:36h

O fato de você não querer incluir o laço de repetição inteiro (que inclui a palavra-chave done) restringe um pouco as opções que você teria. Não poderia usar, por exemplo, funções nem sub-scripts.

Estude as seguintes opções: (1) usar o comando alias, em vez de variáveis comuns; (2) usar o comando eval, passando _o valor_ das variáveis como parte da expressão a ser avaliada.


10. Re: Como armazenar comandos em variáveis para torná-los dinâmicos. Ex. for

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 30/11/2016 - 16:17h

paulo1205, consegui seguindo suas dicas.
No caso utilizei o comando alias dentro do meu script onde apenas atribuo ao alias o início do comando for (meu objetivo).
No entanto encontrei 2 problemas os quais eu contornei conforme a solução a seguir.

Problema 1: Os alias criados em shell não são reconhecidos em sub shell, mesmo a atribuição e chamada do alias ocorrendo dentro do mesmo script.
Contorno 1: Utilizei o comando shopt -s expand_aliases para fazer com que o shell reconhecesse o meu alias para a sessão chamadora.

Problema 2:Para atribuir comandos a um alias é necessária a utilização de aspas simples ('comando'). Só que ocorre erro caso precisarmos utilizar aspas simples dentro de aspas simples, como seria o caso do comando awk '{print $9}', logo algo como alias LS='ls -ltr | awk '{print $9}'' não funciona.
Contorno 2: Utilizei outro comando ao invés do awk para evitar o uso de aspas simples dentro de aspas simples.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts