0

プロジェクトの要件に従って、リモート マシンで生成された zip ファイルの内容を確認する必要があります。このアクティビティ全体は、自動化フレームワーク スイートを使用して行われます。シェルスクリプトで書かれています。-l および -q スイッチを使用して ssh コマンド abd execute unzip コマンドを使用して、上記のアクティビティを実行しています。しかし、このコマンドは失敗しています。および以下のエラー メッセージを示します。

[SOMEUSER@MACHINE IP Function]$ ./TESTS.sh
    ssh SOMEUSER@MACHINE IP unzip -l -q SOME_PATH/20130409060734*.zip | grep -i XML  |wc -l
    unzip:  cannot find or open SOME_PATH/20130409060734*.zip, SOME_PATH/20130409060734*.zip.zip or SOME_PATH/20130409060734*.zip.ZIP.

    No zipfiles found.
    0

私が手動で書いたのと同じコマンドですが、それは正しく機能します。シェルスクリプトを介して実行するたびにこれが失敗するのはなぜですか。

[SOMEUSER@MACHINE IP Function]$ ssh SOMEUSER@MACHINE IP unzip -l -q SOME_PATH/20130409060734*.zip | grep -i XML  |wc -l
        2

その問題を解決するのを手伝ってください。

前もって感謝します, Priyank Shah

4

1 に答える 1

1

ローカル マシンからコマンドを実行すると、リモート ssh コマンドに渡される前にアスタリスク文字がローカル マシンで展開されます。したがって、コマンドは、マシン上の SOME_PATH/20130409060734*.zip ファイルを見つけて、それらを ssh コマンドに挿入して他のマシンに渡すことを期待していますが、(私が想定している) SOME_PATH/20130409060734*.zip ファイルを意味しますリモートマシン。

そのためには、* 文字の前にバックスラッシュ ( \ ) を付けて、それが役立つかどうかを確認してください。一部のシェルでは、エスケープ文字の定義が異なる場合があり、自分のシェルがそのシェルの 1 つである場合は、エスケープ文字を見つけて代わりに使用する必要があります。また、他のサーバーに渡されるコマンドを引用符で囲みます。私の意見では、コマンドラインは次のようになります。

ssh SOMEUSER@MACHINE_IP "/usr/bin/unzip -l -q SOME_PATH/20130409060734\*.zip | grep -i XML  |wc -l"

お役に立てれば

于 2013-04-09T07:07:06.110 に答える