我需要在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脚本吗?
答案 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”