Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

1. Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 17/12/2014 - 01:20h

Olá pessoal!
Eu queria que vocês olhassem meu script e me dizer onde estou errando, logo abaixo:

#!/bin/bash

#------área 0-------------------
c0=0
while read x
do
c0=$(($c0+1))
gnr[$c0]=$x
done < .in2.sh

#edge=1 (Armchair) and edge=2 (zigzag)
edge=${gnr[1]} && echo $edge > .saida2

#------------área 1---------------
c1=0
while read y
do
c1=$(($c1+1))
val[$c1]=$y
done
#Variaçao das linhas CC
ii=${val[1]} #inicial
i=${val[2]} #Final

#------------área 2---------------
#Variaçao das celulas unitarias
kk=${val[3]} #inicial
k=${val[4]} #Final


clear
echo "Aguarde..."

for j in $(seq $ii $i)
do
for jj in $(seq $kk $k)
do
#------------área 3-------------------------------
echo $j > .saida
echo $jj >> .saida

gfortran program -o a.out -O3 && ./a.out

if [ $edge = 1 ]; then
mv $diretorio/exmplo.txt $diretorio/$(echo $j"cc"$jj.xyz)
fi
if [ $edge = 2 ]; then
mv $diretorio/exmplo.txt $diretorio/$(echo $j"cc"$jj.xyz)
fi

done
done

O script aqui não está completo, pois o que esta dando erro na "área 3". Neste script estou importando valores de arquivos de texto. Então, existe um outro programa que gera estes arquivos de texto. Mas quando fui executar o script obtive a seguinte mensagem:

"Global symbol "$gnr" requires explicit package name at (eval 1) line 1."

Quem poder me ajudar a solucionar esse problema ficarei muito grato!


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/12/2014 - 14:25h

O melhor meio de chamar um script é pelo seu próprio nome, depois de dar as permissões corretas (leitura e execução, pelo menos) ao arquivo.

Se você quiser depurar o que está acontecendo, sugiro usar algo como “bash -v -x script”. Isso fará com que cada comando seja impresso, incluindo eventuais substituições de variáveis, antes de ser executado. Assim você poderá ver o ponto exato em que deu erro, quiçá descobrindo o motivo.

3. Re: Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Ton Melo
IZhaq_melo

(usa FreeBSD)

Enviado em 17/12/2014 - 02:21h

linha 3 qual é o 'ponto de parada' do while?

e pra o restante dos erros:

http://stackoverflow.com/questions/11181796/linux-command-line-rename-all-files-with-supplied-argume...


4. Re: Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 17/12/2014 - 02:50h

IZhaq_melo escreveu:

linha 3 qual é o 'ponto de parada' do while?

e pra o restante dos erros:

http://stackoverflow.com/questions/11181796/linux-command-line-rename-all-files-with-supplied-argume...


Na linha 3 estou lendo o arquivo ".in.dat" linha por linha, o a última leitura é equivalente ao fim do while.


5. Re: Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/12/2014 - 11:39h

Essa mensagem de erro é uma mensagem do Perl, não do Bash. O Bash não tem nada equivalente a packages e, além disso, “$gnr” não é um símbolo para o shell -- um símbolo do shell seria apenas “gnr”, sem o cifrão.

Tem certeza de que o erro foi realmente dado pelo script que você mostrou?


6. Re: Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 17/12/2014 - 13:44h

paulo1205 escreveu:

Essa mensagem de erro é uma mensagem do Perl, não do Bash. O Bash não tem nada equivalente a packages e, além disso, “$gnr” não é um símbolo para o shell -- um símbolo do shell seria apenas “gnr”, sem o cifrão.

Tem certeza de que o erro foi realmente dado pelo script que você mostrou?


Vc pode me dizer qual o melhor procedimento para chamar um arquivo em bash? Além do source e eval existe outro métodos?


7. Re: Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 17/12/2014 - 17:17h

paulo1205 escreveu:

O melhor meio de chamar um script é pelo seu próprio nome, depois de dar as permissões corretas (leitura e execução, pelo menos) ao arquivo.

Se você quiser depurar o que está acontecendo, sugiro usar algo como “bash -v -x script”. Isso fará com que cada comando seja impresso, incluindo eventuais substituições de variáveis, antes de ser executado. Assim você poderá ver o ponto exato em que deu erro, quiçá descobrindo o motivo.


Muito obrigado paulo1205!


8. Re: Global symbol "$x" requires explicit package name at (eval 1) line 1. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 17/12/2014 - 17:36h

Corra do eval sempre que puder.

O eval executa código arbitrário e se vc não tiver total controle sobre o que está fazendo, pode dar com os burros n'água.

Quando seu desejo é gerar um novo nome de variável de forma automática, será tentado a usar eval.
Por segurança, sempre que puder, faça uma substituição de variável com base em algum prefixo que permita você ter o controle do que está fazendo, ex:

MinhaVarAntiga="seilaoquetem.sh"

NovaVar="NovaNovinha"${MinhaVarAntiga}

Tudo bem, você pode reclamar que a NovaVar só pode ser usada uma vez e não serve para gerar nomes dinâmicos... Ou nomes de funções novas. Em tese não deve mesmo.
Você deve procurar usar com moderação o eval e somente quando não tiver outra alternativa.

Se for usar, teste se não é possível passar este valor a uma var paralela para fazer algum teste.
Quando for usar em operações com arquivos, em especial exclusão ou mover, tome mais cuidado ainda.

Eval é muito prático mas esconde erros de escrita de programas.
Funciona hoje mas amanhã, só Deus sabe. rsrs








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts