bash - 在 docker-machine : terminal vs shell script 中评估

标签 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   

所以基本上是您所期望的,但是当我运行以下 .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   

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

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

干杯,亚伦

最佳答案

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

source ./myscript.sh

因为 eval 中的导出被返回到您开始运行 shell 的进程,然后被处理掉。这些需要交给 parent ,例如登录 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
$

关于bash - 在 docker-machine : terminal vs shell script 中评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740892/

相关文章:

linux - 如何在 While 循环中获取用户输入并使用测试条件 -gt 10 和 -lt 100?

linux - 我可以等待不是当前 shell 终端子进程的进程终止吗?

linux - Unix 用户级别如何影响我对 docker 镜像的可见性?

bash printf 重复行

sql - 从 .import 插入 datetime()

Xcode 和 Git 在 MacOSX Mountain Lion 上的安装

docker - 错误:429下载deno导入时请求过多

docker - GitHub Packages Docker - 拉取镜像配置时出错 : unknown blob

bash - 如何从 shell 脚本创建和访问 shell 配置文件?

linux - Bash:将文件中的特定内容行移动到文件顶部