[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Script de RSYNC
From: |
MrBiTs |
Subject: |
Re: [shell-script] Script de RSYNC |
Date: |
Tue, 10 Nov 2009 06:55:21 -0200 |
> diff <(cd $DIR_LOCAL; find . -type f -exec md5sum {} \;| sort -k 2) <(ssh
> 10.10.191.112 'cd $DIR_REMOTO; find . -type f -exec md5sum {} \;| sort -k 2')
> > $ARQ_DIFF
> A variável $DIR_REMOTO retorna o valor de /home/user/pasta_spare/ mas na
> linha do comando diff acima ela não está traduzindo esta variável para
> "/home/user/pasta_spare/". Ao invés disso o comando está fazendo um diff
> entre a pasta $DIR_LOCAL (que é /home/user/pasta_producao/) e a pasta home do
> usuário user (estou rodando o script com ele).
Tem um negócio muito legal chamado interpolação de variáveis.
$ DIR_REMOTO='/home/user/pasta_spare/'
$ echo "$DIR_REMOTO"
/home/user/pasta_spare/
$ echo '$DIR_REMOTO'
$DIR_REMOTO
No seu comando:
$ echo ssh 10.10.191.112 'cd $DIR_REMOTO'
ssh 10.10.191.112 cd $DIR_REMOTO
$ echo ssh 10.10.191.112 "cd $DIR_REMOTO"
ssh 10.10.191.112 cd /home/user/pasta_spare/
CommandlineFU é um site MUITO bom, mas se você não tem o conhecimento
básico no seu ambiente, pode cair nessas armadilhas. Explicando, seu
interpretador de comandos não interpola variáveis que estão dentro de
aspas simples.
Aprenda a depurar seus scripts colocando um set -x antes do trecho que
quer depurar e um set +x logo após ele, ou chamando-o através de um
bash -x (isso, obviamente, se estiver usando bash como interpretador;
para outros, descubra a opção correta). Você teria visto uma mensagem
de erro dizendo que o diretório $DIR_REMOTO não existe. Como você não
testa essa condição de nenhuma maneira, não importa se o comando cd
deu certo ou não, você executa automaticamente o próximo comando.
Habitue-se a fazer testes no seu programa. Ao invés do ; você poderia
usar um &&, e o find seria executado somente se o cd tivesse dado
certo.
MrBiTs