&attach_input |
sftp1 |
put foo |
sftp -b sftp2_input [email protected] |
sftp -b sftp2_input [email protected] |
Infelizmente, a sftp executará todos os pedidos no arquivo de entrada um após o outro, não há mecanismo para testar se a transferência funcionou ou não.
Como as macros de comando não podem ser usadas, existem alternativas? O produto gnu_tools é enviado com um programa chamado expect. Ele pode ser usado para enviar comandos, esperar por qualquer número de respostas diferentes e fazer algo baseado no que ele vê no fluxo de saída. Não sou especialista em esperar, mas o script da figura 6 ajudará você a começar. Se você procurar na web por "esperar scripts", você encontrará muitas referências que o ajudarão a personalizar meu exemplo simples.
# If we get an end-of-file (eof) it means that the sftp process # Este procedimento combina com a expressão regular de procura de cordões-chave# na saída coletada do comando que foi executado. Neste caso, o # Estou apenas relatando o tipo de erro, mas outras coisas podem ser feitas # também. Eu também verifico apenas 2 erros. Existem outros. Você terá # para adicioná-los conforme você os encontrar. # proc proc proc procerrors {buf cmd} { se [regexp {.*não foi encontrado] $buf] { coloca "$cmd FAILED : não encontradonnn" retorno 1 } se [regexp {.*Permissao negada} $buf] { coloca "$cmd FAILED : problemas de acessonnn". retorno 1 } retornar 0 }# definir o tempo limite para -1 para que não haja tempo limite. O tempo limite padrão é de 10 segundos # e a maioria das transferências de arquivos demora mais do que isso. Eu decidi não # tempo esgotado, você pode mudar isso. tempo limite -1 # start sftp # esperar pelo prompt de roubo, mas se tivermos um prompt de autenticação, terminando em # mudar para um diretório conviente para testes # chamar a verificação de erros passando todos os caracteres coletados para cima do enviar "put foor" enviar "get barr enviar "quitr |
expect sftp3.exp Nós nos conectamos ao servidor errado ou o servidor foi recarregado.A chave do servidor deve ser validada antes que este script possa ser executado novamente.pronto 10:41:10 |
expect sftp3.exp sftp> get barNão foi possível estabelecer um arquivo remoto: Nenhum arquivo ou diretório deste tipo Arquivo "/SysAdmin/Noah_Davids/sftp_test/bar" não encontrado. sftp> get bar FAILED : not foundready 10:42:11 |
Finalmente, em meu blog FTP mencionei que o FTP era capaz de ler arquivos que ainda estavam abertos e isto, em algumas ocasiões, resultou na transferência de arquivos incompletos, sugeri que se a macro FTP espera que um arquivo apareça em um local e depois o transfere, a macro deve verificar para ter certeza de que não está mais bloqueado. O mesmo problema pode ocorrer com o SFTP e a solução é a mesma. Você pode colocar a verificação de bloqueio de arquivo em uma macro de comando (figura 9) e então, quando o arquivo não estiver mais bloqueado, esperar a chamada com o script apropriado.
&label AGAIN |