1

我有一个我希望能够运行的命令,我通常会在我的 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 虚拟机未处于活动状态,则会失败。

组织这个(别名、脚本等)的正确方法是什么,如果使用命令替换是正确的方法?

4

1 回答 1

2

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

这将意味着在内部命令上切换到双引号sudo和/或插入和退出单引号(您不能在单引号内转义单引号)。

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'\'
于 2015-07-10T16:17:38.353 回答