アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストファイルの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
-----------------------------------

A 回答 (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
    • good
    • 0

shell変数の値を参照する場合は、変数名の前に$をつける必要があります。



put $filename

――のように記述してみては。

この回答への補足

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

補足日時:2005/06/23 08:35
    • good
    • 0

ヒアドキュメントじゃなくて


一回ファイルに書き出したらダメ?

この回答への補足

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

補足日時:2005/06/23 00:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!