如何通过 ssh 使用参数执行远程命令?

2023-12-01

In my .bashrc我定义了一个稍后可以在命令行上使用的函数:

function mycommand() {
    ssh [email protected] cd testdir;./test.sh "$1"
}

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

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

function mycommand() {
    ssh [email protected] 'cd testdir;./test.sh "$1"'
}

我试图保留cd命令和test.sh命令一起,但参数$1没有解决,与我赋予该函数的内容无关。总是尝试执行命令

./test.sh $1

在远程主机上。

我如何正确定义mycommand,所以脚本test.sh切换到目录后在远程主机上执行testdir,能够将论点传递给mycommand to test.sh?


这样做:

function mycommand {
    ssh [email protected] "cd testdir;./test.sh \"$1\""
}

您仍然必须将整个命令作为单个字符串传递,但在该单个字符串中您需要$1在发送到 ssh 之前已扩展,因此您需要使用"" for it.

Update

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

function mycommand {
    printf -v __ %q "$1"
    ssh [email protected] "cd testdir;./test.sh $__"
}
  • 当声明一个函数时function, ()没有必要。
  • 不要仅仅因为你是 POSIXist 就对此发表评论。

从 Bash 4.4 版本开始,它还可以简化为:

function mycommand {
    ssh [email protected] "cd testdir;./test.sh ${1@Q}"
}

See ${parameter@operator}部分在外壳参数扩展.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 ssh 使用参数执行远程命令? 的相关文章

  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • UNIX 统计时间格式

    是否可以格式化 stat 的时间输出 我在用 stat c n A z filename 在 bash 脚本中 但它的时间格式不是我想要的 是否可以在命令中更改此格式 或者我必须稍后手动执行此操作 示例输出如下 lib drwxr xr x
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 静默检查 bash 脚本中是否存在 rpm

    我正在尝试使用 if 语句快速检查 rpm 是否安装在 bash 脚本中 但我想默默地做 目前 当我运行脚本并且 rpm 确实存在时 它将 rpm 的输出输出到我不想要的屏幕 if rpm qa grep glib then do some
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • Linux 上的 Pervasive ODBC 错误 [01000][unixODBC][驱动程序管理器]无法打开 lib '/usr/local/psql/lib/odbcci.so':找不到文件

    我正在尝试让 Pervasive v10 客户端 ODBC 在 Centos 6 上运行 据我所知 没有 64 位 ODBC 客户端 因此我必须使用 32 位客户端 我终于成功安装了它 但尝试使用时出现以下错误 isql v mydsn 0
  • Bash for Windows 10 gcc 不会编译粘贴到根目录中的 c 文件

    正如标题所示 如果我将在其他地方编写的c文件粘贴到Linux子系统的根目录中 则无法编译它 我做了一个测试 我制作了两个不同标题的 hello world 程序 一个在 vi 中 我可以从 bash 界面进入 另一个在其他地方 当我编译了
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 为什么这个符号链接创建了两个实例

    我有一个用于我的点文件的安装脚本 我用来创建一个目录到我的主文件夹的符号链接 这些链接执行得很好 但创建了第二个符号链接 我无法解释为什么 项目中的文件夹结构如下所示 install sh scripts shell sh shell in
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工

随机推荐

  • NDB 查询 fetch() 和 ContextOptions

    我想仅在我的一个查询中禁用上下文缓存 我想我可以这样做 MyModel query ancestor user key fetch 100 options ContextOptions use cache False use memcach
  • HTML5 的 History.js - 需要进行黑客攻击才能不破坏 IE7

    我的目标是仅支持 HTML5 浏览器的 AJAX 历史记录 但是 我希望我的网站能够使用 HTML4 浏览器 但没有 AJAX 历史记录 许多 History js 示例在执行任何操作之前都包含以下检查 if History enabled
  • mailto链接多条正文线

    无法在 mailto 链接中使多行正常工作 就我而言 我正在使用 Outlook 默认邮件阅读器对其进行测试 以下内容放入锚点 href 中 mailto email protected subject test body type 20y
  • 如何防止 XmlSerialzer 转义“嵌套 XML”?

    我正在使用 XmlSerializer 来序列化 反序列化复杂对象 一个属性包含一个 XML 字符串 应将其写入字符串属性而不进行反序列化 示例 可在 LinqPad 中执行 XmlRoot RootObject Serializable
  • 从日期时间获取日期名称

    如何从 Python 中的日期时间对象获取日期名称 例如星期一 星期二 星期三 星期四 星期五 星期六和星期日 所以 举例来说 datetime 2019 9 6 11 33 0 应该给我 Friday import datetime no
  • 覆盖单个文件的编译标志

    我想使用一组全局标志来编译项目 这意味着我在顶级 CMakeLists txt 文件中指定了 ADD DEFINITIONS Wall Weffc pedantic std c 0x 但是 对于子目录中的特定文件 假设为 foo cpp 我
  • 用于重复数据删除的 Kafka 压缩

    我试图了解 Kafka 压缩的工作原理 并有以下问题 kafka 是否保证启用压缩的主题中存储的消息的键的唯一性 Thanks 简短的回答是否定的 Kafka 不保证启用主题保留时存储的密钥的唯一性 在 Kafka 中有两种类型cleanu
  • 如何在android中的fragment中添加选项卡?

    我尝试在片段内添加选项卡 我可以添加 但特定选项卡的内容与选项卡重叠 MainFragmentActivity java public class MainActivity extends FragmentActivity Override
  • 这是什么网页效果

    当你在堆栈溢出时达到 1000 声望时 你将获得一张消耗性用户卡 当您将鼠标悬停在卡片上时 我怎样才能重现这种效果 怎么称呼 我的猜测是它是一个 Jquery 方法 但如果是的话 有人可以指出我正确的方向 因为我寻找它但无法准确得到我需要的
  • 从 Android 中的 url 加载图像,仅当图像很小时

    我在用着BitmapFactory decodeStream从 Android 中的 url 加载图像 我只想下载低于特定尺寸的图像 我目前正在使用getContentLength检查这个 然而 我被告知getContentLength并不
  • java.lang.IllegalArgumentException:未知实体

    我有一个试驾 package com chinalbs service RunWith SpringJUnit4ClassRunner class ContextConfiguration locations classpath appli
  • 简单页面应用程序路由到相同视图或控制器 SailsJS

    如何将多个 url 路由到同一控制器或视图以使用 Angular 单页应用程序 我可以做到这一点 但我觉得很丑 view homepage login view homepage register view homepage troller
  • PHP - 使用简单 XML 复制 XML 节点

    我需要使用简单 XML 加载 XML 源 复制现有节点及其所有子节点 然后在渲染 XML 之前自定义此新节点的属性 有什么建议吗 SimpleXML 不能做到这一点 所以你必须使用DOM 好消息是 DOM 和 SimpleXML 是同一枚硬
  • 如何在mongodb中删除具有特定条件的重复项?

    例如 我的收藏中有以下文档 id GuqXmAkkARqhBDqhy beatmapset id 342537 version MX diff approach 5 artist Yousei Teikoku title Kokou no
  • 如何在 C# 中使用“for”循环创建动态递增变量

    如何在 C 中使用 for 循环创建动态递增变量 像这样 track 1 track 2 track 3 track 4 so on 您无法创建动态命名的变量 您所能做的就是创建一些集合或数组 并对其进行操作 我认为最适合你的课程是通用课程
  • Magento 2 重定向到支付网关错误

    我已经使用转换器转换了我的 Magento 1 支付模块 我想我需要修改代码以适应 Magento 2 我被困在结账过程中 重定向到支付网关 以下是当 magento 尝试重定向到时我的错误http localhost 8083 mm pd
  • Alfresco 社区版和 Alfresco 企业版有什么区别?

    Alfresco 社区版和 Alfresco 企业版有什么区别 它提供的两种功能有什么区别吗 我们可以下载具有更长试用许可证的企业版吗 企业版是商业支持的版本 除了支持之外 您还可以获得补丁 更新 赔偿以及与认证合作伙伴的联系 从功能的角度
  • 如何在Python中获取__main__模块的文件名?

    假设我有两个模块 a py import b print name file b py print name file 我运行 a py 文件 这打印 b C path to code b py main C path to code a
  • 如何使 WinHttpCrackUrl 在 64 位下工作

    我有 Visual Basic for Applications 代码 使用WinHttp并可与在 32 位 Windows XP 上运行的 32 位 Office 2010 完美配合 即使可以正常编译 相同的代码也无法在 64 位 Win
  • 如何通过 ssh 使用参数执行远程命令?

    In my bashrc我定义了一个稍后可以在命令行上使用的函数 function mycommand ssh email protected cd testdir test sh 1 使用该命令时 只需cd命令在远程主机上执行 这test