- ベストアンサー
FTP接続中のコマンド実行結果を変数に入れる方法
- LinuxのシェルでFTP接続中にコマンド実行結果を変数に入れる方法を知りたいです。
- FTP接続後に特定のファイルのファイルサイズをチェックし、その結果を変数に代入する方法を教えてください。
- Linux上で既に変数に入れてあるファイルサイズとFTP上で取得したファイルサイズを比較する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
理解してもらえなかったみたいなので、サンプルを書きます。 ご提示のサンプルはヒアドキュメント構文が間違っていたり、ログを取る必要性があるみたいなので多少変えました。 コマンドはlftpにしてますが、こっちのほうが使い勝手がいいと思います。 ftpコマンドのVervoseオプションだとサーバーからのレスポンスが全部戻ってきて制御構造をするためには加工をする必要がありますから。 (test1.sh) ---<ここから>--- #!/bin/bash NASIP=IPアドレス TARGET=ファイル名 lftp $NASIP <<END | tee Log.txt user ユーザー パスワード put /log/$TARGET /log/$TARGET quote SIZE /log/$TARGET bye END ---<終了>--- というシェルスクリプトを作ります。 これでシェルから % size=`./test1.sh` && echo $size とすればSIZEコマンドの標準出力が変数に入りませんか?
その他の回答 (1)
- taco0603
- ベストアンサー率63% (21/33)
可能です。コマンドの標準出力を変数に格納すれば良いのです。 ftpサイトに接続するシェルスクリプトを作成し、ここではサブルーチンと見なします。 そのシェルスクリプトを呼び出すシェルスクリプトを作成し、メインルーチンと見なします。 メインルーチンからサブルーチンをバッククォートもしくは$()で呼びだし、サブルーチンの標準出力をメインルーチンの変数に格納すればいいのです。 サンプルはこんな感じ。 (メインルーチン) size=`./サブルーチンのファイル名` sizeという変数にサブルーチンの表示結果が入ります。
お礼
回答ありがとうございました。 試して見たのですが、 quoteコマンドが実行できないというエラーが出てしまいました。↓ [root@logserv test]# sh test1.sh test1.sh: line 77: quote: command not found やり方が違うのでしょうか? コードを記述しますので、アドバイスいただけますでしょうか? ftp -i -v -n $NASIP <<END >>Log.txt user uset1 user1 bin put /log/$TARGET /log/$TARGET size=`quote SIZE /log/$TARGET` bye ちなみに、size=`` を記述していない状態では、quoteは正常に動いていました。 変数sizeにquoteの結果を代入する方法を教えて下さい。 お手数ですが、宜しくお願いします。
お礼
丁寧な説明ありがとうございました。 また回答が遅れ申し訳ありません。 確かに希望通りの動作を得られました。助かりました。 ありがとうございます。