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

7 人关注

我需要在Windows的Linux盒子里远程执行一个shell脚本。

#!/bin/bash
if [ "$#" -ne 1 ]; then
    echo "Illegal number of parameters"
    echo "$1"

以下是我在Windows命令提示符下运行的命令

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

我得到的输出是

"参数数量不合法"

有什么办法可以让我把命令行参数传递给shell脚本,使其在远程服务器上执行?

bash
shell
ssh
putty
plink
aaditya 1985
aaditya 1985
发布于 2014-12-14
3 个回答
Martin Prikryl
Martin Prikryl
发布于 2014-12-14
已采纳
0 人赞同

你误解了 -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开关来处理一个(临时)文件。

Alok Tiwari
Alok Tiwari
发布于 2014-12-14
0 人赞同

我在Plink的 "commands.txt "中触发了Shell脚本,这对我来说就像一个魅力,我尝试了以下方法。

  • You can define your script as an one liner using && in a file (I defined in one liner)
  • You need to run your command in <

    Note: Use first EOF in quote like <<'EOF' but not the last one. Else you will see you code will behave weirdly. Please see below.

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

    然后,最后用Plink运行它。

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