是否可以通过 OS X 中的 shell 脚本传输 TFTP 文件?

是否可以通过 OS X 中的 shell 脚本传输 TFTP 文件?

我正在将开发环境从 Windows 迁移到 OS X,遇到了 TFTP 问题。我使用 TFTP 将文件上传到嵌入式网络设备,这是获取设备上文件的唯一选项(不提供 SCP 支持)。

每次我为该设备构建固件时,都需要上传一系列三个文件。在 Windows 上,我有一些简单的脚本,可以一次性上传我需要的所有文件,这使得部署一切变得简单得多。这些脚本很容易,因为 Windows TFTP 客户端以一行命令运行,如下所示:

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

在 OS X 上似乎没有办法用这样的一个命令上传文件。相反,你必须打开 tftp 程序并执行一系列如下所示的命令:

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

到目前为止,我还没有弄清楚如何编写脚本来执行此操作,尽管我对 Unix shell 脚本编写经验不多。有没有人尝试过做类似的事情并想出任何解决方案?

答案1

你应该能够使用“此处文档”tftp在脚本中向程序提供命令:

#!/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

答案2

您可能会发现此 URL 在 shell 脚本 TFTP 中很有用: http://www.unix.com/shell-programming-and-scripting/159848-redirect-output-shell-script-tftp.html

答案3

您可以使用在提示符下输入的命令创建纯文本脚本tftp>,然后使用 unix shell 的stdin重定向将命令传递给tftp可执行文件。

例如,在我的/tmp/目录中,我将文件bin1 bin2和放入其中bin3

然后我使用文本编辑器创建了一个loader.txt包含以下内容的文件:

binary
put bin1 
put bin2
put bin3
quit

由于没有运行 TFTP 服务器,我曾经ttcp -r -u打开 UDP 端口 5001,并观察文件是否正在被处理,然后我在另一个窗口中执行以下操作:

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

对于我的测试用例来说,超时是预料之中的。

我验证了每个文件在超时后都是按顺序提供的,并且它们是以二进制而不是 ascii 模式提供的,因此我确信其中的每一行loader.txt都是通过tftp二进制进行解析的。

我希望这有帮助...

相关内容