É possível criar arquivos TFTP via shell script no OS X?

2

Estou trabalhando na migração do meu ambiente de desenvolvimento do Windows para o OS X e enfrentei um problema com o TFTP. Eu uso o TFTP para fazer o upload de arquivos para um dispositivo de rede embutido, esta é a única opção para obter os arquivos no dispositivo (nenhum suporte SCP é fornecido).

Toda vez que eu construo firmware para este dispositivo, há uma série de três arquivos que precisam ser enviados para ele. No Windows, eu tinha alguns scripts simples que faziam upload de todos os arquivos que eu precisava em uma única tomada, o que torna a implementação muito mais simples. Esses scripts foram fáceis porque o cliente TFTP do Windows é executado em comandos de uma linha como este:

tftp -i <Server IP Address> PUT <Local Filename> <Server Filename>

Parece que não há como carregar um arquivo com um comando como este no OS X. Ao invés disso, você tem que abrir o programa tftp e executar uma série de comandos parecidos com isto:

$ tftp
tftp> connect <Server IP Address>
tftp> mode binary
tftp> put <Local Filename> <Server Filename>
tftp> quit

Até agora não tive nenhuma sorte em descobrir como escrever um script para fazer isso, embora eu não tenha muita experiência com o shell script do Unix. Alguém tentou fazer algo semelhante e encontrar alguma solução?

    
por Greg 25.04.2014 / 16:24

3 respostas

3

Você deve conseguir usar um "aqui documento" para enviar comandos para o programa tftp em um script:

#!/bin/sh

tftp <<EOF
connect <server IP Address>
mode binary
put <Local Filename 1> <Server Filename 1>
put <Local Filename 2> <Server Filename 2>
put <Local Filename 3> <Server Filename 3>
quit
EOF
    
por 25.04.2014 / 17:01
1

Você pode achar esse URL útil no script de shell TFTP: link

    
por 25.04.2014 / 16:58
1

Você pode criar um script de texto simples com os comandos que digitaria no prompt tftp> e, em seguida, usar o stdin redirect do shell unix para passar os comandos para o executável tftp .

Por exemplo, no meu diretório /tmp/ , eu coloco os arquivos bin1 bin2 e bin3 .

Eu usei um editor de texto para criar um arquivo loader.txt com esses conteúdos:

binary
put bin1 
put bin2
put bin3
quit

Não tendo um servidor TFTP em execução, usei ttcp -r -u para abrir a porta UDP 5001 e observei para ver se o arquivo estava sendo processado, quando eu executei o seguinte em outra janela:

[Nevins-mac-mini:/tmp] nevin% tftp 127.0.0.1 5001 < loader.txt
Transfer timed out.

Transfer timed out.

Transfer timed out.

[Nevins-mac-mini:/tmp] nevin%

Os tempos limite eram esperados para o meu caso de teste.

Eu verifiquei que cada arquivo foi oferecido sucessivamente após os tempos limite, e que eles estavam sendo oferecidos em modo binário, não ascii, por isso estou confiante de que cada linha em loader.txt foi analisada através do binário tftp .

Espero que isso ajude ...

    
por 25.04.2014 / 17:46