Variável sendo executada sem chamar

1. Variável sendo executada sem chamar

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/04/2017 - 02:54h

pessoas .. tenho a variável no script
#!/bin/bash
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )


ela funciona de boa ... o problema é q ela está sendo executada na abertura do script (automaticamente).. pq ???



  


2. Re: Variável sendo executada sem chamar

Carlos A. P. Cunha
Carlos_Cunha

(usa Linux Mint)

Enviado em 30/04/2017 - 11:35h

Mauriciodez escreveu:

pessoas .. tenho a variável no script
#!/bin/bash
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )


ela funciona de boa ... o problema é q ela está sendo executada na abertura do script (automaticamente).. pq ???



Execute em modo debug e poste aqui a saida:

bash -x SCRIPT.sh


Abraço
#-------------------------------------------------------------------------------------#
Administrador de Redes Mistas Linux/Windows
LPI 101-102
LPI 201
Para consultas particulares acesse:
www.cunhatec.com.br

"Falar é fácil, me mostre o código." - Linus Torvalds


3. Re: Variável sendo executada sem chamar

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/04/2017 - 11:46h

Carlos_Cunha escreveu:
Execute em modo debug e poste aqui a saida:


mauricio@debian:~$ bash -x ./lxde
++ '[' == '#' ']'
./lxde: line 8: [: ==: esperado operador unário
++ sed -i '/mauricio/s/^/#/' autologin_zenity
++ sed -i '/timeout=0/s/^/#/' autologin_zenity
+ actionlogin='
'
mauricio@debian:~$[/code]
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


4. Re: Variável sendo executada sem chamar

Perfil removido
removido

(usa Nenhuma)

Enviado em 30/04/2017 - 11:46h

Mauriciodez escreveu:

pessoas .. tenho a variável no script
#!/bin/bash
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )


ela funciona de boa ... o problema é q ela está sendo executada na abertura do script (automaticamente).. pq ???


Quando você armazena um valor dentro de $() ou ``, você diz ao script para armazenar o resultado (ou retorno) do comando inserido. Por exemplo:
p=$(echo "home: $HOME") 

Nesse contexto, o comando echo "home: $HOME" será executado assim que você declarar a variável p, e o valor armazenado será o resultado do comando (no meu caso: home: /home/ruan).

Para armazenar um script dentro de uma variável para executá-lo posteriormente, faça da seguinte forma:
actionlogin="if [ \$teste1 == \"#\" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi"

Lembre-se de colocar barra invertida antes de qualquer variável e antes de aspas duplas, como foi em \$teste1 e \"#\", caso contrário o bash vai interpretar a variável e substituir $teste1 pelo valor dela e as aspas duplas não serão inseridas.

Para executar o script da variável $actionlogin, você usa:
eval "$actionlogin" 


*As aspas duplas são necessárias porque há quebra de linhas dentro da variável declarada actionlogin.
--
Linux Counter: #596371


5. Re: Variável sendo executada sem chamar

Carlos A. P. Cunha
Carlos_Cunha

(usa Linux Mint)

Enviado em 30/04/2017 - 11:56h

Mauriciodez escreveu:

Carlos_Cunha escreveu:
Execute em modo debug e poste aqui a saida:


mauricio@debian:~$ bash -x ./lxde
++ '[' == '#' ']'
./lxde: line 8: [: ==: esperado operador unário
++ sed -i '/mauricio/s/^/#/' autologin_zenity
++ sed -i '/timeout=0/s/^/#/' autologin_zenity
+ actionlogin='
'
mauricio@debian:~$[/code]
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


Vc esta dizendo:

actionlogin=$( if [ $teste1 == "#" ] ; then
actionlogin=$( if [ $teste1 == "#" ] ; then

Mas como vimos pelo debug, a variável $teste1 não possui nada(diferente de zero), a condição do IF não ($teste1 == "#") não ocorre com sucesso, logo ele caio no ELSE e executa o que tem ali.
O problema e a falta de dados na variável $teste1.


Abraço
#-------------------------------------------------------------------------------------#
Administrador de Redes Mistas Linux/Windows
LPI 101-102
LPI 201
Para consultas particulares acesse:
www.cunhatec.com.br

"Falar é fácil, me mostre o código." - Linus Torvalds


6. Re: Variável sendo executada sem chamar

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/04/2017 - 12:06h

Carlos_Cunha escreveu:
Mas como vimos pelo debug, a variável $teste1 não possui nada(diferente de zero), a condição do IF não ($teste1 == "#") não ocorre com sucesso, logo ele caio no ELSE e executa o que tem ali.
O problema e a falta de dados na variável $teste1.


foi mal ... tô com a cabeça cheia aqui ... o correto é isso

mauricio@debian:~$ cat autologin_zenity
autologin-user=mauricio
autologin-user-timeout=0

mauricio@debian:~$ cat lxde
#!/bin/bash
teste1=$(grep $USER autologin_zenity | cut -b1)
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )

mauricio@debian:~$ bash -x ./lxde
++ cut -b1
++ grep mauricio autologin_zenity
+ teste1=a
++ '[' a == '#' ']'
++ sed -i '/mauricio/s/^/#/' autologin_zenity
++ sed -i '/timeout=0/s/^/#/' autologin_zenity
+ actionlogin=

_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


7. Re: Variável sendo executada sem chamar

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/04/2017 - 12:08h

ru4n escreveu:
Quando você armazena um valor dentro de $() ou ``, você diz ao script para armazenar o resultado (ou retorno) do comando inserido. Por exemplo:
p=$(echo "home: $HOME") 

Nesse contexto, o comando echo "home: $HOME" será executado assim que você declarar a variável p, e o valor armazenado será o resultado do comando (no meu caso: home: /home/ruan).

Para armazenar um script dentro de uma variável para executá-lo posteriormente, faça da seguinte forma:
actionlogin="if [ \$teste1 == \"#\" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi"

Lembre-se de colocar barra invertida antes de qualquer variável e antes de aspas duplas, como foi em \$teste1 e \"#\", caso contrário o bash vai interpretar a variável e substituir $teste1 pelo valor dela e as aspas duplas não serão inseridas.

Para executar o script da variável $actionlogin, você usa:
eval "$actionlogin" 


*As aspas duplas são necessárias porque há quebra de linhas dentro da variável declarada actionlogin.


Tá me dando um erro aqui quando tô copiando esse teu código ... tentando descobrir !!!
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


8. Re: Variável sendo executada sem chamar

José da Silva
zenull

(usa Outra)

Enviado em 30/04/2017 - 12:09h

Mauriciodez escreveu:

pessoas .. tenho a variável no script
#!/bin/bash
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )


ela funciona de boa ... o problema é q ela está sendo executada na abertura do script (automaticamente).. pq ???

Não há nada errado aí. Como a primeira coisa no script é o actionlogin=$(.....) ele vai executar tudo o que está dentro.
Talvez esteja confundindo com o comportamento de uma função. Aí sim nesse caso mesmo ela só seria executada quando fosse chamada. Por exemplo:

#!/bin/bash

funcao_teste () {
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )
}

echo "exibir isso primeiro"

# Executar função
funcao_teste


9. Re: Variável sendo executada sem chamar

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/04/2017 - 12:26h

zenull escreveu:

Mauriciodez escreveu:

pessoas .. tenho a variável no script
#!/bin/bash
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )


ela funciona de boa ... o problema é q ela está sendo executada na abertura do script (automaticamente).. pq ???

Não há nada errado aí. Como a primeira coisa no script é o actionlogin=$(.....) ele vai executar tudo o que está dentro.
Talvez esteja confundindo com o comportamento de uma função. Aí sim nesse caso mesmo ela só seria executada quando fosse chamada. Por exemplo:

#!/bin/bash

funcao_teste () {
actionlogin=$( if [ $teste1 == "#" ] ; then
sed -i '/mauricio/s/#//' autologin_zenity
sed -i '/timeout=0/s/#//' autologin_zenity
else
sed -i '/mauricio/s/^/#/' autologin_zenity
sed -i '/timeout=0/s/^/#/' autologin_zenity
fi )
}

echo "exibir isso primeiro"

# Executar função
funcao_teste



velho olha só ... ontem eu já tinha feito isso sacou ... funcionou 100% quando testei só dessa forma, só q quando transpus a parte do script para o script real a parada não funcionou, não sei q encrenca q está dando pois no script real toda vez q "conserto" uma parte buga outra !!

vou tentar explicar melhor ... no script real quando essa parte está como variável ele é executada sem chamar (mais funciona) .. quando coloco como "função" ela não é executada nem automaticamente nem quando chama.
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


10. Re: Variável sendo executada sem chamar

José da Silva
zenull

(usa Outra)

Enviado em 30/04/2017 - 12:40h

Ok, se possível, e pra entender melhor, coloque aí toda sequência de comandos envolvida.


11. Re: Variável sendo executada sem chamar

Perfil removido
removido

(usa Nenhuma)

Enviado em 30/04/2017 - 13:57h

Tá me dando um erro aqui quando tô copiando esse teu código ... tentando descobrir !!!


Provavelmente foi na falta de aspas duplas na comparação com a variável $teste1
#!/bin/bash
actionlogin="if [ \"\$teste\" = \"#\" ] ; then
echo \"Passou no teste\"
else
echo \"Reprovou no teste\"
fi"

eval "$actionlogin"

teste=#

eval "$actionlogin"


--
Linux Counter: #596371


12. Re: Variável sendo executada sem chamar

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/04/2017 - 16:09h

zenull escreveu:

Ok, se possível, e pra entender melhor, coloque aí toda sequência de comandos envolvida.


Decidi recomeçar o script ... então a princípio preciso resolver essa situação .. abrir o script como usuário normal ( link simbólico ) e executar como ROOT.

mauricio@debian:~$ ./zenity_menu.sh
sed: Não foi possível renomear /tmp/sedPOgeBu: Operação não permitida
sed: Não foi possível renomear /tmp/sedDbbopu: Operação não permitida
mauricio@debian:~$


#!/bin/bash

arquivo=``/tmp/autologin_zenity``
primeira_letra=`grep $USER $arquivo | cut -b1`

habilitar () {
if [ $condiction == "FALSE" ] ; then
sed -i "/$USER/ s/#//g" $arquivo
sed -i '/timeout/ s/#//g' $arquivo
else
sed -i "/$USER/ s/^/#/g" $arquivo
sed -i '/timeout/ s/^/#/g' $arquivo
fi }

condiction=`if [ $primeira_letra == "#" ];then
echo "FALSE"
else
echo "TRUE"
fi`
habilitar


_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts