我需要从 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
我得到输出为
"Illegal number of parameters"
有什么方法可以将命令行参数传递给将在远程服务器上执行的 shell 脚本吗?
最佳答案
您误解了 -m
开关的工作原理。
这只是一种让 plink
加载命令以从本地文件发送到服务器的方法。
文件未在远程服务器上上传和执行(带参数)。
它的内容在本地读取并发送到服务器并在那里执行,就像您在(远程)命令行上键入它一样。你不能给它参数。
解决方法是在从批处理文件(比如 run.bat
)运行 plink
之前在本地动态生成文件:
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
开关。
关于bash - 通过 Plink 在 Windows 命令行上运行 shell 脚本(带参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598715/