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

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

Dúvida sobre o comportamento do Bash.


From: Gentil de Bortoli Júnior
Subject: Dúvida sobre o comportamento do Bash.
Date: Mon, 14 Feb 2005 16:03:05 -0200
User-agent: Mozilla Thunderbird 1.0 (X11/20041206)

Pessoal, minha vez.

Comecei a fazer um script para baixar os diretórios que quero de um servidor FTP. Aliás, se alguém conhecer outra forma de fazer o que esse script faz, me avise. :)

Nos testes, me deparei com um problema.
Troquei umas idéias com o colega MrBits mas... nada ainda.

O script pode ser executado recebendo apenas um diretório ou vários.

As saídas relevantes estão abaixo.

Observação: A linha imediatamente abaixo da linha onde o comando é executado é um "echo" do que o script vai (ou deveria) executar após as substituições de variáveis. Entenderam? Não?

Bom, no exemplo abaixo, essa linha que falei é a
"wget -r ftp://user:address@hidden/arquivos/Dir1";

########### [ Executando com apenas um diretório ]

$ ./pega.sh Dir1
wget -r ftp://user:address@hidden/arquivos/Dir1
--15:40:44--
ftp://user:*password*@ftp.exemplo.com.br/arquivos/Dir1

########### [ Executando com dois diretórios ]

$ ./pega.sh Dir1 Dir2
wget -r ftp://user:address@hidden/arquivos/{Dir1,Dir2}
--15:45:40-- ftp://user:*password*@ftp.exemplo.com.br/arquivos/%7BDir1,Dir2%7D

Reparem que no exemplo com dois diretórios, as chaves não foram mantidas de forma literal. No lugar delas surgiram os códigos %7B e %7D.

Agora, executando o script com a opção -x, surge o X da questão (que é o que está estragando, acho, o meu script).

Vejam:

########### [ Executando com apenas um diretório (opção -x) ]
Apenas linhas relevantes:

$ ./pega.sh Dir1
+ echo 'wget -r ftp://user:address@hidden/arquivos/Dir1'
wget -r ftp://user:address@hidden/arquivos/Dir1
+ wget -r ftp://user:address@hidden/arquivos/Dir1
--15:50:31--  ftp://user:*password*@ftp.exemplo.com.br/arquivos/Dir1

########### [ Executando com dois diretórios (opção -x) ]
Apenas linhas relevantes:

$ ./pega.sh Dir1 Dir2
+ echo 'wget -r ftp://user:address@hidden/arquivos/{Dir1,Dir2}'
wget -r ftp://user:address@hidden/arquivos/{Dir1,Dir2}
+ wget -r 'ftp://user:address@hidden/arquivos/{Dir1,Dir2}'
--15:51:47-- ftp://user:*password*@ftp.exemplo.com.br/arquivos/%7BDir1,Dir2%7D

Ou seja, nesse último caso o Bash inseriu aspas (' ') no meu comando, que ficou assim:

wget -r 'ftp://user:address@hidden/arquivos/{Dir1,Dir2}'

Quando deveria ter ficado assim:

wget -r ftp://user:address@hidden/arquivos/{Dir1,Dir2}

Posto isso, vamos às perguntas. :)

1) Por quê o Bash inseriu essas aspas?
2) Há como evitar isso?
3) Há como contornar isso?

Eu posso usar um 'for' e resolver meu problema. Mas aí perde a graça. Não vou ter mais o problema. :))

Posso também tentar uma solução com o comando ftp, mas, se eu quisesse o ftp, estaria usando ele e não o wget. :)

Já tentei escapar várias coisas ali, inclusive as chaves.
Já tentei proteger algumas coisas com $' '.
Já dei echo em tudo quanto é lugar, executei de trás para frente e de baixo para cima.

Com certeza única coisa que não tentei deve ser a que resolve o problema... :)

Alguma idéia?

[]s
Gentil.

Ahh, sim, claro. Quem quiser ver o script, acesse:
www.bortoli.com.br/pega.txt


reply via email to

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