• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • coredump
  • ベストアンサー率46% (12/26)
回答No.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

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

shell変数の値を参照する場合は、変数名の前に$をつける必要があります。 put $filename ――のように記述してみては。

syakuyaku
質問者

補足

回答ありがとうございます 早速、試してみます。

  • mendokusa
  • ベストアンサー率13% (359/2726)
回答No.1

ヒアドキュメントじゃなくて 一回ファイルに書き出したらダメ?

syakuyaku
質問者

補足

すいません、私自身unixに未熟なので mendokusaさんのアドバイスがどのようなものか 具体的にもう少し教えていただけますか?

関連するQ&A