docker-machine中的Eval:terminal vs shell脚本

我正在尝试运行一个简单的shell脚本来自动更改docker-machine环境。 问题是这样的,当我在Macterminal中直接运行以下命令时,输出如下内容:

eval $(docker-machine env default) docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * digitalocean Running tcp://***.**.***.***:**** v1.12.0 

所以基本上你会期望,但是当我运行下面的.sh脚本:

 #!/usr/bin/env bash eval $(docker-machine env default) 

输出是:

 ./run.sh docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default digitalocean Running tcp://***.**.***.***:**** v1.12.0 

所以基本上,它不是设置为主动,我无法访问它。

有没有人遇到过这个问题,知道如何解决它? 看起来对我来说真的很奇怪,几乎所有的东西都在运行,而且自动化了。

干杯,亚伦

我认为你需要find你的shell脚本

 source ./myscript.sh 

因为在eval中的出口正在返回到你开始运行shell的过程中,然后被处理掉。 这些需要去父母,例如loginshell

考虑a.sh

 #!/bin/bash eval $(echo 'export a=123') export b=234 

当以两种方式运行时

 $ ./a.sh $ echo $a $ echo $b $ source a.sh $ echo $a 123 $ echo $b 234 $