首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Plink在Windows命令行上运行shell脚本(带有参数)

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

Stack Overflow用户
提问于 2014-12-13 19:09:24
回答 3查看 38.9K关注 0票数 7

我需要在Linux框内从Windows远程执行一个shell脚本

代码语言:javascript
复制
#!/bin/bash
if [ "$#" -ne 1 ]; then

    echo "Illegal number of parameters"
    exit
fi
    echo "$1"

下面是我从Windows命令提示符中运行的命令

代码语言:javascript
复制
 cmd>   plink.exe -ssh username@host -pw gbG32s4D/ -m C:\myscript.sh 5

我得到了输出

“非法参数数”

有没有办法将命令行参数传递给将在远程服务器上执行的shell脚本?

EN

回答 3

Stack Overflow用户

发布于 2014-12-15 09:42:56

您误解了-m开关的工作原理。

这只是让plink从本地文件加载要发送到服务器的命令的一种方式。

该文件不会上载并在远程服务器上执行(带有参数)。

它的内容在本地读取并发送到服务器,并在那里执行,就像您在(远程)命令行上键入它一样。你不能给它论据。

解决方法是在从批处理文件(例如plink )运行run.bat之前在本地动态生成该文件:

代码语言:javascript
复制
echo echo %1 > script.tmp
plink.exe -ssh username@host -pw gbG32s4D/ -m script.tmp

然后使用参数运行批处理文件:

代码语言:javascript
复制
run.bat 5

以上将使脚本在服务器上执行echo 5

如果脚本很复杂,而不是在本地组装它,让它在服务器上准备好(正如@MarcelKuiper所建议的那样),然后只通过Plink执行脚本。

代码语言:javascript
复制
plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"

在本例中,由于我们只执行一个命令,所以可以在Plink命令行上传递它,包括参数。您不必在(临时)文件中使用-m开关。

票数 10
EN

Stack Overflow用户

发布于 2019-12-25 05:52:14

我从Plink中触发了"commands.txt“中的Shell脚本,它对我来说很有魅力,我尝试了以下方法:

  • 您可以使用&&在文件中(我在一个队列中定义)将脚本定义为一个一行。
  • 您需要在<

注意:在引号中使用第一个EOF,类似于<‘EOF’,而不是最后一个。否则,您将看到您的代码将行为怪异。请看下面的内容。

示例:

代码语言:javascript
复制
sudo -i <<'EOF'
<your script here>
EOF

然后,最后使用Plink运行它:

代码语言:javascript
复制
plink -ssh username@hostname -pw password -m commands.txt
票数 1
EN

Stack Overflow用户

发布于 2014-12-13 19:22:00

您是否尝试过将命令和参数放在引号中:

即-m "C:\myscript.sh 5“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27462589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档