如何保存 eval $(other_comand) 命令的别名

Gab*_*oux 9 alias environment-variables eval

我已经使用docker了一段时间,每次启动 docker 时都会写一个命令:

eval $(docker-machine env)
Run Code Online (Sandbox Code Playgroud)

我知道eval除非必要,否则不应使用,但以下提到了它:

docker-machine env 输出这样的环境变量:

docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://<some_ip>:<some_port>"
export DOCKER_CERT_PATH="/home/gableroux/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell: 
# eval $(docker-machine env)
Run Code Online (Sandbox Code Playgroud)

eval 抓住这些并将它们加载到我当前的会话中。

现在如果我想要一个这样的别名怎么办:

alias dockereval="eval $(docker-machine env)"
Run Code Online (Sandbox Code Playgroud)

语法很好,但问题是当一个 dotfile(让我们.zshrc举个例子)时,$()当你注册source那个文件的别名时,它的内容会被评估。

which dockereval
Run Code Online (Sandbox Code Playgroud)

结果是

dockerenv: aliased to eval
Run Code Online (Sandbox Code Playgroud)

我尝试了一些事情,例如:

alias dockereval="docker-machine env | eval"
alias dockereval="docker-machine env | /bin/bash"
alias dockereval="eval `docker-machine env`"
Run Code Online (Sandbox Code Playgroud)

但没有一个工作。第二个可能是因为它在不同的会话中运行,第三个和$()我猜的一样

还有其他方法可以使用别名加载这些环境变量吗?

小智 15

将您的别名用单引号而不是双引号括起来。

alias dockereval='eval $(docker-machine env)'
Run Code Online (Sandbox Code Playgroud)

双引号允许扩展变量(至少在 bash 中)而单引号不允许