docker-machine ssh试图在本地计算机上运行部分命令

问题描述 投票:0回答:1

运行以下命令时:

docker-machine ssh name-here "docker swarm init --advertise-addr $(hostname -I | awk '{print $1}')"

我收到以下错误:

主机名:非法选项-我用法:主机名[-fs] [主机名]

这是因为该命令正尝试在没有hostname -I标志的MacOS上的本地计算机上运行-I

我将完整命令封装在双引号中,因此我期望双引号的全部内容作为docker-machine ssh的单个参数执行,但似乎并非如此。

我已经尝试过使用单引号('),但这会干扰awk在打印前后的单引号要求。我什至尝试了疯狂的$$,因为您会在主机名旁边的makefile中使用它,但这也不起作用。

当命令用双引号引起来时,为什么$(hostname -I | awk '{print $1}')在主机上执行,我如何正确运行以上命令以在主机内使用主机名初始化Docker群?

bash docker-machine
1个回答
0
投票

Command substitutions在双引号内总是被“立即”执行,也就是说,作为Bash扩展命令的一部分。用引号引起来,您需要做的事是用引号引起来。比较双引号(局部替换):$ bash --noprofile --norc -o xtrace bash-4.4$ ssh 127.0.0.1 "echo ${SSH_CONNECTION-No SSH connection}" + ssh 127.0.0.1 'echo No SSH connection' No SSH connection

和单引号(远程替换):

bash-4.4$ ssh 127.0.0.1 'echo ${SSH_CONNECTION-No SSH connection}' + ssh 127.0.0.1 'echo ${SSH_CONNECTION-No SSH connection}' 127.0.0.1 59618 127.0.0.1 22

© www.soinside.com 2019 - 2024. All rights reserved.