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"
这是我从Windows命令提示符运行的命令
 cmd>   plink.exe -ssh username@host -pw gbG32s4D/ -m C:\myscript.sh 5
我得到输出为
"非法数量的参数"
有什么办法可以将命令行参数传递给将在远程服务器上执行的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.bat 5
以上将使脚本echo 5在服务器上执行.
如果脚本很复杂,而不是在本地组装它,请在服务器上准备好(如@MarcelKuiper建议的那样)并通过Plink执行脚本.
plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"
在这种情况下,当我们只执行一个命令时,您可以在Plink命令行上传递它,包括参数.您不必将-m开关与(临时)文件一起使用.