使用SSH的调用命令失败?

时间:2013-04-09 06:41:17

标签: linux bash shell ssh unzip

根据项目要求,我需要检查在远程机器上生成的zip文件的内容。这整个活动是使用自动化框架套件完成的。这是用shell脚本编写的。我使用带有-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

我手动编写的相同命令,但工作正常。我真的不知道。为什么每当我通过shell脚本执行时都会失败。

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

请帮我解决这个问题。

先谢谢, Priyank Shah

1 个答案:

答案 0 :(得分:1)

从本地计算机运行命令时,星号字符将在本地计算机上展开,然后再传递给远程ssh命令。因此,您的命令期望在您的机器上找到SOME_PATH / 20130409060734 * .zip文件并将它们插入到您的ssh命令中以传递给另一台机器,而您(我假设)意味着,SOME_PATH / 20130409060734 * .zip文件在远程机器。

为此,在*字符前加一个反斜杠(\),看看它是否对你有帮助。在某些shell中,转义字符的定义可能会有所不同,如果你的转义字符是其中之一,则需要找到转义符并使用转义字符。另外,使用围绕传递给其他服务器的命令的引号。在我看来,你的命令行看起来应该是这样的:

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

希望这有帮助