shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: [shell-script] Comando eval


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Comando eval
Date: Thu, 3 Oct 2002 10:29:08 -0300

O shell tem seu tempo certo para cada coisa. Então suas tarefas são
executadas na seguinte ordem:

1 - Exame da linha de comando - Verifica se é um comando ou uma atribuição
(o que destingue é que atribuição não pode ter espaços em branco);
2 - Caso seja cmd, ele faz:
2.1 - Resolução dos redirecionamentos;
2.2 - Substituição de variáveis;
2.3 - Substituição de meta caracteres (coringas);
2.4 - Manda a linha já toda "mastigada" para o kernel.

Desta forma se vc desejar inverter esta ordem, vc não conseguirá, seria
necessário um cmd que dê uma 1a. passada fazendo tudo até o 2.3 e desse
outra passada indo até o fim do ciclo. Ex:

$ pipe=\|
$ ls $pipe wc -l
ls: |: No such file or directory
ls: wc: No such file or directory

No ex acima eu gostaria de ter feito um "ls | wc -l", não consegui pq o
redirecinamento é feito antes da resolução das variáveis. Desta forma qdo
apareceu o "|", já era tarde demais. Então qual é a saída?

$ eval ls $pipe wc -l
     22

Na primeira passada a linha foi montada e na segunda foi executada. Outro
exemplo:

$ a=f\*
$ b='ls -a $a'
$ $b
ls: $a: No such file or directory
$ eval $b
fifo1  fifo2.Z

Tente fazer um script que gere o seguinte resultado:

Recebi os seguintes parametros:
Parametro 1 = parm1
Parametro 2 = parm2
  ...
  ...
Parametro n = parmn

Tente 1o. sem eval e depois com eval.

[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070  /  9853-4044
*address@hidden


> -----Mensagem original-----
> De: DyNaMiTe [mailto:address@hidden]
> Enviada em: quinta-feira, 3 de outubro de 2002 09:02
> Para: address@hidden
> Assunto: [shell-script] Comando eval
> 
> 
> Júlio,
> 
> Eu li a sua explicação e o comando eval pra mim é quase um 
> mistério, ainda
> não compreendi direito quando deve ser utilizado. (sei que 
> esta não é a
> pergunta do Luís, mas é uma curiosidade minha)
> 
> ----- Original Message -----
> From: "Julio Cezar Neves - DATAPREVRJ"
> <address@hidden>
> To: <address@hidden>
> Sent: Wednesday, October 02, 2002 5:33 PM
> Subject: [shell-script] Exibir conteúdo de variável cujo nome 
> está em outra
> veriável
> 
> 
> Luís, observe a sequência de comandos:
> 
> Prompt> b=2
> Prompt> a=b
> Prompt> echo \$$a
> $b
> Prompt> eval echo \$$a
> 2
> 
> Qdo eu fiz echo \$$b eu "escapei" o 1o. $ e recebi um $b. 
> Para receber o
> valor deste $b é necessário que o comando seja re-executado. 
> Para isso é que
> se usa o eval.
> 
> Se entendi bem o seu problema, o ??? deveria ser substituído por:
> $(eval echo \$$GRP)
> 
> Se não for isso avise.
> 
> [ ]s,
> Julio Cezar Neves
> -Eu Apoio o Software Livre-
> -I Support Free Software-
> * +55 21 2528-7070  /  9853-4044
> *address@hidden
> 
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de 
> programação, como perl, C etc. Quem insistir em não seguir 
> esta regra será moderado sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
 

Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]