我需要在Linux框内从Windows远程执行一个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脚本?
发布于 2014-12-15 09:42:56
您误解了-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开关。
发布于 2019-12-25 05:52:14
我从Plink中触发了"commands.txt“中的Shell脚本,它对我来说很有魅力,我尝试了以下方法:
注意:在引号中使用第一个EOF,类似于<‘EOF’,而不是最后一个。否则,您将看到您的代码将行为怪异。请看下面的内容。
示例:
sudo -i <<'EOF'
<your script here>
EOF然后,最后使用Plink运行它:
plink -ssh username@hostname -pw password -m commands.txt发布于 2014-12-13 19:22:00
您是否尝试过将命令和参数放在引号中:
即-m "C:\myscript.sh 5“
https://stackoverflow.com/questions/27462589
复制相似问题