添加一个使用命令替换的 script/command/alias

Adding a script/command/alias that uses command substitution

我有一个我希望能够执行的命令 运行,我通常会在 Mac 启动时 运行 它。我尝试这样做的方式是在 ~/.bash_profile:

中创建一个别名
alias b2dinit="boot2docker up && $(boot2docker shellinit) && boot2docker ssh 'sudo /etc/init.d/docker restart'"

boot2docker shellinit输出几个需要执行的命令。例如:

export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/mkobit/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

我遇到的问题是,当一个新的shell被打开时,$(boot2docker shellinit)被执行并且上面的export命令也被执行,或者如果boot2docker失败虚拟机未激活。

组织它的正确方法是什么(别名、脚本等)以及使用命令替换是否是正确的方法?

在别名周围使用单引号将命令替换推迟到别名执行时间或转义双引号中的 $

这将意味着在内部 sudo 命令上切换到双引号 and/or 放入和取出单引号(您无法在单引号内转义单引号)。

alias b2dinit="boot2docker up && $(boot2docker shellinit) && boot2docker ssh 'sudo /etc/init.d/docker restart'"

alias b2dinit='boot2docker up && $(boot2docker shellinit) && boot2docker ssh "sudo /etc/init.d/docker restart"'

alias b2dinit='boot2docker up && $(boot2docker shellinit) && boot2docker ssh '\''sudo /etc/init.d/docker restart'\'