zsh函数在OSX上设置docker环境
我试图在zsh中创build一个函数来运行当前机器的命令docker-machine env <machine>
,如果只有一台机器运行的话。 我试图让它运行以下eval命令:
eval "$(docker-machine env default)"
要设置docker环境variables,运行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)"
因此,要正确设置环境,您需要inputeval "$(docker-machine env default)"
我有以下function
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命令来通过单个脚本设置环境?
在@Etan Reisner的评论之后,我将其改为:
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 }