2016-05-18 30 views
0

私はsftpバッチに変数を渡す必要があるスクリプトを書いています。私は検索した他のドキュメントに基づいていくつかのコマンドを実行することができましたが、私が必要とするものにはかなり手が届きません。バッシュ - 変数をsftpバッチに渡す

エンド目標は、リモートサーバ上のファイルテスト演算子に似て働くことです: (if [-f $a ] then:; else exit 0;)

最終的に、私は、ファイルが存在する場合、ファイルは、スクリプトを実行し続けたい(:)、または終了0存在しない場合(終了1ではなく)リモートマシンはWindowsサーバであり、Linuxではありません。

は、ここで私が持っているものです。

NOTE - 私は合格しようとしている変数、$source_dir、この関数を呼び出すスクリプトの入力パラメータに基づいて変化します。これとlsワイルドカードは難しい部分です。私は特定のファイルを探すときにそれを動作させることができましたが、 "any"ファイルだけではありません。

${source_dir}= /this/directory/changes 

    RemoteCheck() { 

    /bin/echo "cd $source_dir" > someBatch.txt 
    /bin/echo "ls *" > someBatch.txt 

    /usr/bin/sftp -b testBatch.txt -oPort=${sftp_port} ${sftp_ip} 


    exit_code=$?; 
    if [ $exit_code -eq 0 ]; then 
     : 
    else 
     exit 0 
    fi 

これを行うより良い方法がありますが、私は複数のフォーラムを検索しており、これを操作する方法はまだ見つかりませんでした。

何か助けていただければ幸いです、あなたはいつも非常に役に立ちました!

+1

:http://www.shellcheck.net/ – Cyrus

+0

あなたは「あなたがドンよろしいです

あなたは次のように出力の残りの部分からリストを区切るために、シェルechoコマンドを使用することができます'cd $ source_dir'に行きたいですか?あなたのコードでは 'ls *'で上書きします。 – alvits

+0

私はそれを上書きするという意味ですか?コマンドを連続して実行しませんか?私はこれを正しく使用していないかもしれませんが、私はこのようにいくつかのコマンドをストリングできると思っていました。 – SomeGuy

答えて

0

OpenSSH sftpの終了コードだけでファイルの存在をテストすることはできません。

sftpの出力をファイルにリダイレクトし、解析してファイルがあるかどうかを調べることができます。見てみてください

!echo listing-start 
ls 
!echo listing-end