Executar comando armazenado em uma variável [RESOLVIDO]

1. Executar comando armazenado em uma variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 15/08/2017 - 18:43h

como faço para executar um comando armazenado em uma variável em formato de texto e que este comando pegue os valores de outras variáveis em tempo de execução?

explicando melhor meu problema com um exemplo ilustrativo...

no código abaixo tenho um comando armazenado em uma variável no formato de texto: cmd="echo $pwd"

e consigo executar o texto da variável como um comando: eval $cmd

o problema é que quando executo o comando ao invés de o comando pegar em tempo de execução o valor da variável "pwd", no entanto, ele pega o valor dessa variável no momento em que atribuí o comando para ser armazenado na variável no formato de texto.

assim, ao invés de o resultado "Final" ser "456" o resultado está sendo "123".

pwd="123"

cmd="echo $pwd"

pwd="456"

k=$(eval $cmd)

echo "Final: $k"

ou seja, como fazer com que o comando "eval $cmd" pegue o valor atual da variável "pwd"? (que é "456")



  


2. Re: Executar comando armazenado em uma variável

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/08/2017 - 19:47h

raserafim escreveu:

como faço para executar um comando armazenado em uma variável em formato de texto e que este comando pegue os valores de outras variáveis em tempo de execução?

explicando melhor meu problema com um exemplo ilustrativo...

no código abaixo tenho um comando armazenado em uma variável no formato de texto: cmd="echo $pwd"

e consigo executar o texto da variável como um comando: eval $cmd

o problema é que quando executo o comando ao invés de o comando pegar em tempo de execução o valor da variável "pwd", no entanto, ele pega o valor dessa variável no momento em que atribuí o comando para ser armazenado na variável no formato de texto.

assim, ao invés de o resultado "Final" ser "456" o resultado está sendo "123".

pwd="123"

cmd="echo $pwd"

pwd="456"

k=$(eval $cmd)

echo "Final: $k"

ou seja, como fazer com que o comando "eval $cmd" pegue o valor atual da variável "pwd"? (que é "456")


Para "pegar" o valor atual de $pwd, altere a ordem da declaração das variáveis:
pwd="123"
pwd="456"
cmd="echo $pwd"
$cmd

att.:
marcelo oliver



3. Re: Executar comando armazenado em uma variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 16/08/2017 - 13:05h

msoliver escreveu:

Para "pegar" o valor atual de $pwd, altere a ordem da declaração das variáveis:
pwd="123"
pwd="456"
cmd="echo $pwd"
$cmd

att.:
marcelo oliver

msoliver, fiz apenas um "exemplo ilustrativo".

o meu script é bem mais amplo, o que dificultaria de enxergar o problema caso eu o colocasse completo...

no meu código a primeira atribuição de "pwd" está dentro de uma condição "if"... e a segunda atribuição está dentro de um laço "for"...




4. Re: Executar comando armazenado em uma variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 16/08/2017 - 13:08h

raserafim escreveu:

pwd="123"

cmd="echo $pwd"

pwd="456"

k=$(eval $cmd)

echo "Final: $k"


já encontrei uma solução!

ao invés de {cmd="echo $pwd"} coloco {cmd='echo "$pwd"'}!!

pwd="123"

cmd='echo "$pwd"'

pwd="456"

k=$(eval $cmd)

echo "Final: $k"








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts