SSH命令中的本地和远程变量如何在本地可用

时间:2018-10-18 13:13:16

标签: linux bash ssh

这是此问题的变体:How have both local and remote variable inside an SSH command

如何将“ ssh变量” B传送到本地计算机?

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

返回3,没有,$ B

如何在本地访问B的值?

一些基于注释的解释: 我正在使用bash脚本访问远程主机,以在那里修改某些内容,以及在其中创建工作区的其他内容。这个工作空间的位置是我想要存储在变量中并保存以供以后使用的位置。

基本上,我有一个功能可以转到远程主机并创建工作区,然后再有一个功能可以使用该工作区的路径在该处执行其他操作。

我希望能够提供一个轻巧,纤薄的解决方案,该解决方案可以通过类似于以下命令的方式集成并轻松阅读:

 ssh host@name "ws_allocate myworkspace; workspace=ws_find myworkspace;"

,然后在本地使用$ workspace。这是一个更大的bash脚本的一部分,对于非专业的bash用户(例如我自己)应该很容易理解...

原来是bash—Better way to store variable between runs?的副本

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

X=$(ssh user@host 'echo $X')

这将在服务器上运行echo $X并将结果输出放在本地变量X中,您稍后可以通过说出$X

来使用。

因此要将其应用于您的示例,您可以说:

workspace=$(ssh host@name 'ws_allocate myworkspace; ws_find myworkspace;')

请注意,局部变量workspace将包含远程运行命令的输出。因此,我假设在您的示例中,仅显示ws_find myworkspace,并且对ws_allocate的调用是静默的。

答案 1 :(得分:-2)

好,所以对我来说,最简单的解决方案是将$ B的值存储在远程主机上,该解决方案允许将$ B的值存储在远程主机上。如此处已经描述和讨论的:bash—Better way to store variable between runs?:(

ssh ${supercomputer} "
ws_list -a >workspaces.txt;
if grep -q "${experiment}" workspaces.txt; 
then echo 'we have a workspace already'; 
else ws_allocate ${experiment} 30; 
fi; 
ws_find ${experiment} > mypathtoworkspace;"

其中超级计算机是主机的地址,请尝试创建要创建的工作空间(如果没有,请尝试),并为要创建的工作空间进行实验。

我想在本地使用远程工作空间的路径,例如

 echo "${workspace}"

但这似乎是不可能的-因此,我将下载正在远程主机上写入的文件,并读取该文件的路径以在本地使用

如果有人看到更好的解决方案,欢迎您!