通过Plink在Windows命令行上运行shell脚本(带参数)

时间:2014-12-13 19:09:24

标签: bash shell putty plink

我需要在Windows的Linux框中远程执行shell脚本

#!/bin/bash
if [ "$#" -ne 1 ]; then

    echo "Illegal number of parameters"
    exit
fi
    echo "$1"

这是我从Windows命令提示符

运行的命令
 cmd>   plink.exe -ssh username@host -pw gbG32s4D/ -m C:\myscript.sh 5

我的输出为

  

“参数数量非法”

有什么办法可以将命令行参数传递给将在远程服务器上执行的shell脚本吗?

3 个答案:

答案 0 :(得分:9)

您误解了-m开关的工作原理。

这只是让plink加载从本地文件发送到服务器的命令的一种方法。

该文件未在远程服务器上上载和执行(带参数)。

它的内容在本地读取并发送到服务器并在那里执行,就像在(远程)命令行上键入它一样。你不能给它参数。


解决方法是在批处理文件(例如plink)中运行run.bat之前,在本地生成文件:

echo echo %1 > script.tmp
plink.exe -ssh username@host -pw gbG32s4D/ -m script.tmp

然后使用参数:

运行批处理文件
run.bat 5

以上将使脚本在服务器上执行echo 5


如果脚本很复杂,而不是在本地组装它,请在服务器上准备好(如@MarcelKuiper建议的那样)并通过Plink执行脚本。

plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"

在这种情况下,当我们只执行一个命令时,您可以在Plink命令行上传递它,包括参数。您不必将-m开关与(临时)文件一起使用。

答案 1 :(得分:1)

我从Plink的“ commands.txt”中触发了Shell脚本,它通过以下尝试的方法对我很有用:

  • 您可以在文件中使用&&(我在一个划线员中定义),将脚本定义为一个划线员。
  • 您需要在<

注意:在报价中使用第一个EOF,例如<<'EOF',但不要使用最后一个。否则,您将看到您的代码行为异常。 请参见下面。

示例:

sudo -i <<'EOF'
<your script here>
EOF

然后,最后使用Plink运行它:

plink -ssh username@hostname -pw password -m commands.txt

答案 2 :(得分:0)

您是否尝试将命令和参数放在引号中:

即。 -m“C:\ myscript.sh 5”