docker-machine 中的 Eval:终端与 shell 脚本

Aar*_*haw 5 bash shell docker docker-machine

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

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

基本上正如您所期望的,但是当我运行以下 .sh 脚本时:

#!/usr/bin/env bash
eval $(docker-machine env default)
Run Code Online (Sandbox Code Playgroud)

输出是:

./run.sh
docker-machine ls
NAME    ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
default          digitalocean   Running   tcp://***.**.***.***:****           v1.12.0   
Run Code Online (Sandbox Code Playgroud)

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

有没有人以前遇到过这个问题并且知道如何解决它?对我来说似乎真的很奇怪,除了这个方面之外,几乎所有其他东西都在运行和自动化。

干杯,亚伦

Kee*_*yOn 4

我认为你需要获取你的 shell 脚本

source ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

因为 eval 中的导出将返回到您开始运行 shell 的进程,然后被丢弃。这些需要转到父级,例如登录 shell

考虑 a.sh

#!/bin/bash
eval $(echo 'export a=123')
export b=234
Run Code Online (Sandbox Code Playgroud)

当以两种方式运行时

$ ./a.sh
$ echo $a

$ echo $b


$ source a.sh
$ echo $a
123
$ echo $b
234
$
Run Code Online (Sandbox Code Playgroud)