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

标签 bash shell ssh 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

我得到输出为

"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/

相关文章:

linux - 如何转义 bash 脚本命令行中传递的参数

command-line - 如何测试文件列表是否存在?

linux - 如何使用 SSH 命令将递归目录和文件列表导出到 Linux Bash shell 中的文本文件?

bash - 如何将 sshpass 命令放入 bash 脚本中?

node.js - 将命令行参数或标志传递给 NPM package.json 脚本

PHP 更快的素数生成器

linux - 如何执行位于 s3 存储桶上的 bash 脚本?

linux - "host1$ ssh host2 cmd1 | cmd2"cmd2 将在哪台主机上运行?

C 到 NASM 转换

bash - Shell 逐行读取文件,但在每一行之后都显示未找到。我错过了什么?