2015-12-29 46 views
2

我試圖在zsh中創建一個函數來運行當前機器的命令docker-machine env <machine>(如果只有一臺機器在運行)。我試圖讓它運行以下eval命令:zsh函數在OSX上設置docker環境

eval "$(docker-machine env default)"

要設置泊塢窗環境變量,運行docker-machine env default將輸出如下:

export DOCKER_TLS_VERIFY="1" 
export DOCKER_HOST="tcp://192.168.99.100:2376" 
export DOCKER_CERT_PATH="/Users/chris/.docker/machine/machines/default" 
export DOCKER_MACHINE_NAME="default" 
# Run this command to configure your shell: 
# eval "$(docker-machine env default)" 

因此,要正確設置環境,您需要輸入eval "$(docker-machine env default)"

我有以下功能

dmset() { 
    COUNT=`docker-machine ls | grep "Running" | wc -l` 
    if [[ "${COUNT// /}" == "1" ]] 
    then 
     RUNNING_MACHINE=`docker-machine ls | grep "Running" | awk '{print $1;}'` 
     COMMAND="\"\$(docker-machine env $RUNNING_MACHINE)\"" 
     eval $COMMAND 
     echo Setting docker environment for $RUNNING_MACHINE 
    else 
     echo "Unable to set Docker environment" 
    fi 
} 

但這不起作用。我收到以下錯誤消息:

(eval):1: no such file or directory: export DOCKER_TLS_VERIFY="1"\nexport DOCKER_HOST="tcp://192.168.99.100:2376"\nexport DOCKER_CERT_PATH="/Users/chris/.docker/machine/machines/default"\nexport DOCKER_MACHINE_NAME="default"\n# Run this command to configure your shell: \n# eval "$(docker-machine env default)" 

如何運行eval命令以通過單個腳本設置環境?

+0

不明確的,你希望發生什麼。你可以編輯你的Q來包含你期望在'eval $ COMMAND'內發生的例子嗎?我有多年使用'eval'的經驗,在這種情況下我沒有看到它可以爲你做什麼(並且爲了更現代的語法,已經放棄了'eval'幾年)。 ...爲什麼反撥命令與'$(現代cmd替代)'的混合。加入20世紀90年代,接受'$(現代cmd替代)':-)!祝你好運! – shellter

+0

可能有更好的方法來做到這一點,但運行docker來配置環境docker-machine env 說運行eval語句。但我無法得到正確運行的評估...並不是我真正瞭解eval。 – Xetius

+1

不要在字符串中放置複雜的命令。它不能很好地工作(或者在大多數情況下)。只是不要這樣做。 –

回答

4

繼@Etan賴斯納的評論,我把它改爲:

dmset() { 
    COUNT=`docker-machine ls | grep "Running" | wc -l` 
    if [[ "${COUNT// /}" == "1" ]] 
    then 
     RUNNING_MACHINE=`docker-machine ls | grep "Running" | awk '{print $1;}'` 
     while IFS= read -r line 
     do 
      if [[ $line == 'export'* ]] 
      then 
       eval $line 
      fi 
     done < <(docker-machine env $RUNNING_MACHINE) 
     echo "Docker environment set for $RUNNING_MACHINE" 
    else 
     echo "Unable to set Docker environment" 
    fi 
}