- ベストアンサー
shスクリプトでftp接続してファイル転送したい
テキストファイルの1行の文字列を読込んで ftpで、文字列と同名のファイルを別サーバに転送する shスクリプトを作成したいと思っています。 テキストファイルから読込んだ文字列を変数に格納して ftp接続後、putで変数を指定すると 『変数名のファイルがありません』 というエラーがでます。 エラーメッセージから、変数が変数として扱われていない。 ファイル名そのものとして扱われていると思います。 テキストファイルから読込んだ文字列をftpで使用するには どうしたらよいでしょうか? また、何か代替案はあるのでしょうか? 簡略化したshスクリプトの内容は以下の通りです。 ------------------------------------ #!/bin/sh read filename <./test.txt ftp -n host_name <<"EOD" user user_name password passive binary cd /export/test put filename bye EOD -----------------------------------
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
どもです。 え~っと、このような時にはexpectという言語を 使うのが便利が宜しいです。まぁ、perlとかでも 同じような事が出来ますが、、、 で、expectを使用する場合、実環境でコードを 書かないとつらいものがあります。 一応、サンプルを以下に乗せますが、多分動作 しないでしょう。 expect "XX" となっているところは、FTPで接続しているときに 表示される文字列が来るまで待つって意味なので、 XX が来るまで待つって感じです。 #!/usr/local/bin/expect if { $argc < 1} { puts "Error" exit 1 } set fname [lindex $argv 0] # 要修正 spawn ftp 192.168.100.135 # 要修正 ユーザー名 expect "Name" expect ":" send "hogeuser\r" # 要修正 パスワード expect "Password:" send "hogepwd\r" expect "ftp>" send "passive\r" expect "ftp>" send "binary\r" expect "ftp>" send "cd /export/test\r" expect "ftp>" send "put $fname\r" expect "ftp>" send "bye\r" expect eof
補足
回答ありがとうございます 早速、試してみます。