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

aad*_*985 7 ssh bash shell putty plink

我需要在Windows的Linux机箱内远程执行shell脚本

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

    echo "Illegal number of parameters"
    exit
fi
    echo "$1"
Run Code Online (Sandbox Code Playgroud)

这是我从Windows命令提示符运行的命令

 cmd>   plink.exe -ssh username@host -pw gbG32s4D/ -m C:\myscript.sh 5
Run Code Online (Sandbox Code Playgroud)

我得到输出为

"非法数量的参数"

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

Mar*_*ryl 10

你误解了-m开关的工作原理.

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

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

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


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

echo echo %1 > script.tmp
plink.exe -ssh username@host -pw gbG32s4D/ -m script.tmp
Run Code Online (Sandbox Code Playgroud)

然后使用参数运行批处理文件:

run.bat 5
Run Code Online (Sandbox Code Playgroud)

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


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

plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"
Run Code Online (Sandbox Code Playgroud)

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


小智 0

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

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