web-dev-qa-db-ja.com

OS Xのシェルスクリプトを介してファイルをTFTPすることは可能ですか?

開発環境をWindowsからOSXに移行する作業を行っていますが、TFTPで問題が発生しました。 TFTPを使用してファイルを組み込みネットワークデバイスにアップロードします。これは、デバイスでファイルを取得するための唯一のオプションです(SCPサポートは提供されていません)。

このデバイスのファームウェアをビルドするたびに、アップロードする必要のある一連の3つのファイルがあります。 Windowsでは、必要なすべてのファイルを1回でアップロードする簡単なスクリプトがいくつかあり、すべての展開がはるかに簡単になりました。これらのスクリプトは、Windows TFTPクライアントが次のような1行のコマンドで実行されるため、簡単でした。

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

OS Xでは、このような1つのコマンドでファイルをアップロードする方法はないようです。代わりに、tftpプログラムを開いて、次のような一連のコマンドを実行する必要があります。

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

これまでのところ、Unixシェルスクリプトの経験はあまりありませんが、これを行うためのスクリプトの書き方を理解することはできませんでした。誰かが似たようなことをして解決策を考え出そうとしたことがありますか?

3
Greg

"here document" を使用して、スクリプトでコマンドを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
5
Gordon Davisson

このURLは、TFTPのシェルスクリプトで役立つ場合があります。 http://www.unix.com/Shell-programming-and-scripting/159848-redirect-output-Shell-script-tftp.html

1
gurple

tftp>プロンプトで入力するコマンドを使用してプレーンテキストのスクリプトを作成し、unixシェルのstdinリダイレクトを使用してコマンドをtftp実行可能ファイルに渡すことができます。 。

たとえば、/tmp/ディレクトリに、ファイルbin1bin2bin3を配置します。

次に、テキストエディタを使用して、次の内容のファイル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を介して解析されたと確信しています。バイナリ。

これがお役に立てば幸いです...

1
Nevin Williams