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

SSH命令中如何同时包含本地和远程变量

柴宏阔
2023-03-14
问题内容

如何在ssh命令中同时包含本地和远程变量?例如下面的示例代码:

A=3;
ssh host@name "B=3; echo $A; echo $B;"

我可以访问A,但无法访问B。

但是在以下示例中:

A=3;
ssh host@name 'B=3; echo $A; echo $B;'

我没有A,只能访问B。

是否可以同时访问A和B?


问题答案:

我认为这是您想要的:

A=3;
ssh host@name "B=3; echo $A; echo \$B;"

使用双引号时

您的shell会对前缀为的变量进行自动扩展$,因此在您的第一个示例中,当看到

ssh host@name "B=3; echo $A; echo $B;"

bash将其扩展为:

ssh host@name "B=3; echo 3; echo ;"

然后 传递host@name "B=3; echo 3; echo ;"作为参数ssh。这是因为您是使用定义AA=3,但从未定义过B,因此$B会在本地解析为空字符串。

当使用单引号时

用单引号引起来的所有内容都解释为字符串文字,因此在执行以下操作时:

ssh host@name 'B=3; echo $A; echo $B;'

B=3; echo $A; echo $B;一旦您登录到远程服务器,说明将运行。您已经B在远程外壳程序中定义了,但是您从未告诉过它是什么A,因此$A将解析为空字符串。

因此,当您使用时\$,如解决方案中所示:

\$意思是按$字面意义解释字符,因此我们按字面意义发送echo $B作为远程执行指令之一,而不是先让bash
$B在本地扩展。我们最终告诉ssh我们要做的事情等效于此:

ssh host@name 'B=3; echo 3; echo $B;'


 类似资料:
  • 问题内容: 以下是使用Heredoc的ssh脚本的示例(实际脚本更为复杂)。是否可以在SSH heredoc或命令中同时使用本地和远程变量? 在本地服务器上设置为在远程服务器上使用。在远程服务器上运行时设置为在本地服务器上使用。在脚本中被识别。未设置。 如果更改为,则设置为,而`FILE_NAME则未设置。我不明白为什么会这样? 有没有一种可以同时识别和识别的方式? 正在使用bash的版本2。默认

  • 问题内容: 我希望能够使用ssh从我的机器上运行命令并传递环境变量 这是我正在尝试的: 是在进行ssh调用的计算机上设置的,并且由于该变量在远程主机上不存在,因此不会被提取。 如何传递的值? 问题答案: 如果您使用 代替 您的外壳程序会在将命令字符串发送到远程主机之前进行插值。

  • 我想运行在kubernetes中使用cron作业的文件中具有ssh命令的外壳脚本 test.sh 当我通过pod手动执行它时,它会抛出错误,并触发作业抛出权限被拒绝的消息。 谁能帮我解决这个问题。

  • 问题内容: 在我的我确定,我可以在命令行后使用的功能: 使用此命令时,仅在远程主机上执行该命令。该命令在本地主机上执行。这是因为分号将两个不同的命令分开:命令和命令。 我尝试如下定义函数(注意单引号): 我试图将命令和命令放在一起,但是参数解析不取决于我给函数的内容。总是试图执行命令 在远程主机上。 如何正确定义,所以剧本正在改变进入目录后,在远程主机上执行,具有传递给参数的能力来? 问题答案:

  • 主要内容:rsync -a 选项,rsync --delete选项在 Linux 系统下,数据备份的工具很多,除了前面介绍了 tar、cpio、dd 命令之外,本节再介绍一个用来备份数据的命令,就是 rsync。 从字面意思上,rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前

  • 本文向大家介绍linux下使用ssh远程执行命令批量导出数据库到本地,包括了linux下使用ssh远程执行命令批量导出数据库到本地的使用技巧和注意事项,需要的朋友参考一下 前天正在跟前端的同事调试功能。服务器开好,模拟的玩家登录好,就在倒计时。这时突然运营的同事跑过来说要统计几个服务器玩家的一些情况,也就是需要从几个服的数据库导出部分玩家的数据。好吧,我看了一下时间,11:47。心想,跟前端调试完