Environment-Variables

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

  • June 8, 2016

我已經使用docker了一段時間,每次啟動 docker 時都會寫一個命令:

eval $(docker-machine env)

我知道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)

eval抓住這些並將它們載入到我目前的會話中。

現在,如果我想要這樣的別名怎麼辦:

alias dockereval="eval $(docker-machine env)"

語法很好,但問題是當一個點文件(.zshrc比如說)時,$()當你註冊source那個文件的別名時,它的內容會被評估。

which dockereval

結果是

dockerenv: aliased to eval

我嘗試了一些方法,例如:

alias dockereval="docker-machine env | eval"
alias dockereval="docker-machine env | /bin/bash"
alias dockereval="eval `docker-machine env`"

但沒有一個起作用。第二個可能是因為它在不同的會話中執行,第三個和$()我猜的一樣

還有其他方法可以使用別名載入這些環境變數嗎?

用單引號而不是雙引號將您的別名括起來。

alias dockereval='eval $(docker-machine env)'

雙引號允許擴展變數(至少在 bash 中),而單引號不允許

引用自:https://unix.stackexchange.com/questions/288506