Docker-machine中的Eval:终端vs shell脚本

时间:2016-08-03 10:23:53

标签: bash shell docker docker-machine

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

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

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

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

输出结果为:

#ifndef MAP_H
#define MAP_H
#include "Sprite.h"
#include <SFML/Graphics.hpp> 
#include <iostream>

class Map : public sprite
{
private:
    char mapname[50];
    int columnnumber;
    int linenumber;
    char casestatematricia[];

public:
    void setmapname(char newmapname[50]);
    void battlespace(int column, int line);
    void setcasevalue(int col, int line, char value);
    void printcasematricia();

};


#endif

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

之前是否有人遇到此问题并知道如何解决?对我来说似乎很奇怪,除了这个方面之外,还有其他一切都在运行和自动化。

干杯,亚伦

1 个答案:

答案 0 :(得分: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
$