gpt4 book ai didi

linux - SSH命令中如何同时拥有本地和远程变量

转载 作者:IT王子 更新时间:2023-10-29 00:13:29 25 4
gpt4 key购买 nike

如何在 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 ;"

thenhost@name "B=3; echo 3; echo ;" 作为参数传递给ssh。这是因为您使用 A=3 定义了 A,但您从未定义过 B,因此 $B 解析为本地的空字符串。


当您使用单引号时:

单引号括起来的所有内容都被解释为字符串文字,所以当您这样做时:

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

指令B=3; echo $A; echo $B; 将在您登录到远程服务器后运行。您已经在远程 shell 中定义了 B,但您从未告诉它 A 是什么,因此 $A 将解析为空字符串。


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

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

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

关于linux - SSH命令中如何同时拥有本地和远程变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com