是否可以在远程 ssh 命令中使用变量?

2024-04-15

我想在远程计算机上按顺序执行多个命令,并且后面的一些命令依赖于前面的命令。在最简单的例子中,我得到了这个:

ssh my_server "echo this is my_server; abc=2;"
this is my_server
abc=2: Command not found.
ssh my_server "echo this is my_server; abc=2; echo abc is $abc"
abc: undefined variable

对于一些背景信息,我实际上想做的是拼凑一条路径并启动一个 java 应用程序:

ssh my_server 'nohup sh -c "( ( echo this is my_server; jabref_exe=`which jabref`; jabref_dir=`dirname $jabref_exe`; java -jar $jabref_dir/../jabref.jar` $1 &/dev/null ) & )"' &
jabref_dir: Undefined variable.

这样,每当 jabref 在服务器上更新到新版本时,我就不必手动更新 jar 文件的路径。 jabref 可执行文件不接受参数,但使用以下命令启动它java -jar确实如此,这就是为什么我必须稍微调整一下路径。

目前我有一个单独的脚本文件中的命令列表并调用

ssh my_server 'nohup sh -c "( ( my_script.sh &/dev/null ) & )"' &

这是可行的,但由于 ssh 调用已经在一个脚本文件中,因此将所有内容放在一起会很好。


在这个例子中

ssh my_server "echo this is my_server; abc=2;"

abc是在远程端设置的,所以应该清楚为什么在本地机器上没有设置。

在下一个示例中,

ssh my_server "echo this is my_server; abc=2; echo abc is $abc"

你的本地 shell 尝试扩展$abc在将其发送到远程主机之前的参数中。稍微修改一下就会如您所期望的那样工作:

ssh my_server 'echo this is my_server; abc=2; echo abc is $abc'

单引号会阻止本地 shell 尝试扩展$abc,因此文字文本会到达远程主机。


要最终解决您真正的问题,请尝试以下操作:

jabref_dir=$( ssh my_server 'jabref_exe=$(which jabref); jabref_dir=$(dirname $jabref_exe);
               java -jar $jabref_dir/../jabref.jar > /dev/null; echo $jabref_dir' )

这将在远程服务器上将带引号的字符串作为命令运行,并准确输出一个字符串:$jabref_dir。该字符串被捕获并存储在本地主机上的变量中。

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

是否可以在远程 ssh 命令中使用变量? 的相关文章

随机推荐

  • 如何使用不同用户表的多重身份验证注销 JWT 令牌

    这是 config auth php 中的代码 guards gt web gt driver gt session provider gt users api gt driver gt jwt provider gt users hash
  • 领域文件的大小是如何发展的?

    领域文件的大小是如何发展的 首先 我有一个包含多个属性的领域文件 其中一个是包含 860 个条目的数组 每个数组条目又包含几个属性 一个数组属性声明条目的名称 我观察到以下情况 如果名称属性为 Criteria A1 直到 Criteria
  • SKReceiptRefreshRequest 每次都询问密码

    我在用SKReceiptRefreshRequest验证来自服务器的收据 问题是每次提示密码时它都会询问我 谁能帮我建议一种更好的方法来验证用户收据 这就是我正在做的事情 我正在使用refreshReceipt当应用程序启动时 void r
  • 如何将 GridLayout.Spec 用于扩展多行的列?

    我正在尝试动态创建一个 2 行 4 列的表 但每种情况下行和列的大小不应相同 也许我会附上一张图片 我想 据我了解 当我不使用 XML 标记来使用 setLayoutParams 中的 GridLayout Spec 来实现此目的时 但我不
  • 如何让属性设置器通过SQL函数发送值

    我试图在 Rails 生成其 sql 查询之前 使 ActiveRecord 模型中的属性设置器将其值包装在 text2ltree postgres 函数中 例如 post path 1 2 3 post save 应该生成类似的东西 UP
  • 对象“_Application”的方法“VBE”失败

    我的一位客户在运行下面的 Excel VBA 代码时遇到问题 他收到以下错误Method VBE of object Application failed 但只有一次 在他打开 VBE 后 它开始工作 而且 直到昨天 它还对他有效 他正在使
  • 如何在 Angular 4 中为数字管道指定语言环境千位分隔符

    例如 如何为 Angular 4 中的数字管道指定 覆盖默认 区域设置 千位分隔符 p total number 角度 5 从 Angular 5 开始 区域设置参数已添加到十进制管道中 如官方文档中所示 https angular io
  • 将多个 go 例程的响应获取到数组中

    我需要从多个 go 例程获取响应并将它们放入一个数组中 我知道通道可以用于此目的 但是我不确定如何确保所有 go 例程都已完成结果的处理 因此我正在使用等待组 Code func main log Info Collecting ints
  • 允许使用 Angular FileSaver.js 选择目录

    我在用文件保存器 js https github com eligrey FileSaver js从 Angular 保存文件 但是 我想允许用户选择目录 我怎样才能做到这一点 我不相信这是可能的 浏览器可以选择是否向用户显示 另存为 对话
  • 找不到模块“rxjs/subject/BehaviorSubject”

    我正在使用 Angular 2 当我使用这两者中的任何一个时 我的程序运行良好 import BehaviorSubject from rxjs Rx import BehaviorSubject from rxjs 但是 我尝试使用以下方
  • 从 Delphi 组件捕获 WM_COPYDATA

    我正在尝试编写一个组件 通过 WM COPYDATA 在应用程序之间发送字符串消息 我想捕获 WM COPYDATA 但这不起作用 TMyMessage class TComponent private Private declaratio
  • 如何将 Liquid 标签突出显示在有序列表中?

    这就是我want页面为 ol li first li li second code code li li third li ol 这就是我正在写的 1 first 2 second highlight ruby code here endh
  • 验证外键时 Accepts_nested_attributes_for 出现问题

    我正在使用 Ruby on Rails v3 2 2 我想解决使用时与外键验证相关的问题accepts nested attributes for and validates associated回报率方法 也就是说 我有以下模型类 cla
  • SQLite 区分大小写的搜索,带有整理 nocase 字段

    我有一个数据库 我无法更改 它有一个整理 nocase 字段 name string collate nocase 我需要对此区分大小写的字段进行搜索 这可以通过 整理 nocase 实现吗 Thanks Just 切换排序规则 http
  • SQL - 返回有限的行数,但返回完整的行数

    场景 我需要从 Visual FoxPro 数据库中提取信息 但是 对此运行大型查询可能会导致系统锁定 为了解决这个问题 我们设置了限制 如果查询运行超过一定时间 则取消查询 并限制它将返回的行数 有没有办法使用 SELECT TOP 进行
  • 是否可以使用 HTML5 创建垂直仪表?

    通常 如果我创建
  • 当用户更改活动进程时触发事件

    当程序用户将活动窗口更改为不同进程的窗口时 是否有一个事件或创建事件的方法会触发 如果没有这样的事件 那么制作类似的东西的最佳方法是什么 我目前有一个每 3 秒运行一次 Process GetCurrentProcess 的计时器 但我正在
  • dll 中的 Delphi 表单

    将具有完整功能的Form放在dll中是个好主意吗 主应用程序将调用返回表单对象的 dll 函数 在 Delphi 中执行此操作的公认方法是使用包而不是 DLL 包本质上是 DLL 但具有 Delphi 特定功能 允许跨包边界使用 VCL 对
  • 当增量值重新开始时如何排除行?

    我是一个新手海报 但花了很多时间在这里研究答案 我不太清楚如何使用 SQL Server 2008 R2 创建 SQL 结果集 它可能应该使用更现代版本的超前 滞后 我试图根据一列的排序来聚合数据 但每个序列中可能有不同数量的实例 我知道序
  • 是否可以在远程 ssh 命令中使用变量?

    我想在远程计算机上按顺序执行多个命令 并且后面的一些命令依赖于前面的命令 在最简单的例子中 我得到了这个 ssh my server echo this is my server abc 2 this is my server abc 2