当前位置: 首页 > 面试题库 >

如何通过带参数的ssh执行远程命令?

贺季
2023-03-14
问题内容

在我的.bashrc我确定,我可以在命令行后使用的功能:

function mycommand() {
    ssh user@123.456.789.0 cd testdir;./test.sh "$1"
}

使用此命令时,仅cd在远程主机上执行该命令。该test.sh命令在本地主机上执行。这是因为分号将两个不同的命令分开:ssh命令和test.sh命令。

我尝试如下定义函数(注意单引号):

function mycommand() {
    ssh user@123.456.789.0 'cd testdir;./test.sh "$1"'
}

我试图将cd命令和test.sh命令放在一起,但是参数$1解析不取决于我给函数的内容。总是试图执行命令

./test.sh $1

在远程主机上。

如何正确定义mycommand,所以剧本test.sh正在改变进入目录后,在远程主机上执行testdir,具有传递给参数的能力mycommandtest.sh


问题答案:

改为这样:

function mycommand {
    ssh user@123.456.789.0 "cd testdir;./test.sh \"$1\""
}

您仍然必须将整个命令作为单个字符串传递,但是在该单个字符串中,您需要先进行$1扩展,然后再将其发送到ssh,因此您需要使用""它。

更新资料

实际上,执行此操作的另一种正确方法是使用printf %q正确引用该参数的方法。即使参数中包含空格,单引号,双引号或任何其他可能对shell具特殊含义的字符,这也将使参数的解析变得安全:

function mycommand {
    printf -v __ %q "$1"
    ssh user@123.456.789.0 "cd testdir;./test.sh $__"
}
  • 当使用html" target="_blank">声明函数时function()没有必要。
  • 不要仅仅因为您是POSIXist就对此发表评论。


 类似资料:
  • 问题内容: 我试图通过这样的本地服务器上的ssh命令在远程linux服务器上执行命令: ssh myremoteserver’类型ttisql’ 其中ttisql是我的远程计算机路径上的可执行文件。 运行此命令的结果是: bash:第0行:类型:ttisql:未找到 当我只是先连接并执行以下操作: ssh myremoteserver 然后输入命令: [myuser @ myremoteserve

  • 我正在尝试从groovy中使用shell命令< code > notify-send-t 2000 " Title " " Message " ,以下一种方式< code > " notify-send-t 2000 \ " Title \ " \ " Message \ "。execute()就可以完美地工作了。但是当我试图用表达代替信息时,似乎什么都不管用。下面是代码片段: 能帮我理解一下吗?

  • 问题内容: 我正在尝试通过Java执行命令行参数。例如: 上面的命令打开命令行,但是不执行或。有任何想法吗?我正在运行Windows XP,JRE6。 (我已经对问题进行了更详细的修订。以下答案很有用,但不能回答我的问题。) 问题答案: 你发布的代码使用自己的命令启动三个不同的过程。要打开命令提示符然后运行命令,请尝试以下操作(请勿自己尝试):

  • 我在远程服务器上设置了一个自动日志检查的设置。我创建了类似这样的方法,使用exec命令跟踪日志… 如何运行mysql命令将结果返回到eclipse终端?

  • 本文向大家介绍python通过getopt模块如何获取执行的命令参数详解,包括了python通过getopt模块如何获取执行的命令参数详解的使用技巧和注意事项,需要的朋友参考一下 前言 python脚本和shell脚本一样可以获取命令行的参数,根据不同的参数,执行不同的逻辑处理。 通常我们可以通过getopt模块获得不同的执行命令和参数。下面话不多说了,来一起看看详细的介绍吧。 方法如下: 下面我

  • 问题内容: 如何在远程Linux机器上执行命令/脚本?说我想从框a的框b开始服务tomcat。 问题答案: 我想这是最好的安全方式,例如: 必须根据您的特定需求(例如,仅绑定到ipv4)部署OPTIONS的地方,并且您的远程命令可能正在启动您的tomcat守护程序。 注意 : 如果不想在每次运行ssh时都提示您,也请查看ssh- agent,以及系统允许的情况。关键是…了解ssh密钥交换过程。请仔