• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FTP接続中のコマンド実行結果を変数に入れる方法)

FTP接続中のコマンド実行結果を変数に入れる方法

このQ&Aのポイント
  • LinuxのシェルでFTP接続中にコマンド実行結果を変数に入れる方法を知りたいです。
  • FTP接続後に特定のファイルのファイルサイズをチェックし、その結果を変数に代入する方法を教えてください。
  • Linux上で既に変数に入れてあるファイルサイズとFTP上で取得したファイルサイズを比較する方法を教えてください。

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

  • ベストアンサー
  • taco0603
  • ベストアンサー率63% (21/33)
回答No.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コマンドの標準出力が変数に入りませんか?

pen123
質問者

お礼

丁寧な説明ありがとうございました。 また回答が遅れ申し訳ありません。 確かに希望通りの動作を得られました。助かりました。 ありがとうございます。

その他の回答 (1)

  • taco0603
  • ベストアンサー率63% (21/33)
回答No.1

可能です。コマンドの標準出力を変数に格納すれば良いのです。 ftpサイトに接続するシェルスクリプトを作成し、ここではサブルーチンと見なします。 そのシェルスクリプトを呼び出すシェルスクリプトを作成し、メインルーチンと見なします。 メインルーチンからサブルーチンをバッククォートもしくは$()で呼びだし、サブルーチンの標準出力をメインルーチンの変数に格納すればいいのです。 サンプルはこんな感じ。 (メインルーチン) size=`./サブルーチンのファイル名` sizeという変数にサブルーチンの表示結果が入ります。

pen123
質問者

お礼

回答ありがとうございました。 試して見たのですが、 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の結果を代入する方法を教えて下さい。 お手数ですが、宜しくお願いします。

関連するQ&A