¿Es posible archivos TFTP a través de shell script en OS X?

2

Estoy trabajando en la migración de mi entorno de desarrollo de Windows a OS X y he encontrado un problema con TFTP. Utilizo TFTP para cargar archivos en un dispositivo de red integrado, esta es la única opción para obtener los archivos en el dispositivo (no se proporciona soporte SCP).

Cada vez que compilo firmware para este dispositivo, hay una serie de tres archivos que deben cargarse en él. En Windows tuve algunos scripts simples que cargarían todos los archivos que necesitaba en una sola toma, lo que simplifica mucho la implementación. Estos scripts fueron fáciles porque el cliente TFTP de Windows se ejecuta en comandos de una línea como este:

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

No parece que haya ninguna forma de cargar un archivo con un comando como este en OS X. En cambio, tienes que abrir el programa tftp y ejecutar una serie de comandos que se parecen a esto:

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

Hasta ahora no he tenido suerte en descubrir cómo escribir un script para hacer esto, aunque no tengo mucha experiencia con los scripts de shell de Unix. ¿Alguien ha intentado hacer algo similar y ha encontrado alguna solución?

Greg
fuente

Respuestas:

3

Debes poder usar un "aquí documento" para alimentar comandos a la tftp Programa en un 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
Gordon Davisson
fuente
1

Puede hacer un script de texto plano con los comandos que ingresaría en el tftp> y luego use el shell de Unix stdin redirigir para pasar los comandos a la tftp ejecutable.

Por ejemplo, en mi /tmp/ directorio, pongo archivos bin1 bin2 y bin3.

Luego usé un editor de texto para hacer un archivo loader.txt con estos contenidos:

binary
put bin1 
put bin2
put bin3
quit

No tener un servidor TFTP en ejecución, lo usé ttcp -r -u para abrir el puerto UDP 5001 y ver si el archivo estaba siendo procesado, cuando ejecuté lo siguiente en otra ventana:

[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%

Los tiempos de espera se esperaban para mi caso de prueba.

Verifiqué que cada archivo se ofrecía a su vez después de los tiempos de espera, y que se ofrecían en modo binario, no en modo ascii, por lo que estoy seguro de que cada línea en loader.txt fue analizado a través de la tftp binario.

Espero que esto ayude...

Nevin Williams
fuente