在docker-machine中使用Eval: 终端 vs Shell脚本

5
我试图运行一个简单的shell脚本来自动更改docker-machine环境。问题在于,当我直接在Mac终端中运行以下命令时,会输出以下内容:
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   

基本上,它没有将其设置为活动状态,因此我无法访问它。

有人之前遇到过这个问题并知道如何解决吗?对我来说似乎非常奇怪,除了这个方面,其他几乎所有事情都在运行和自动化。

谢谢,Aaron

1个回答

4
我认为您需要对您的shell脚本进行资源引用。
source ./myscript.sh

由于在eval中导出的内容将被返回到您启动shell进程并被处理掉的进程。这些内容需要发送到父进程,例如登录shell。

考虑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
$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接