添加使用命令替换的脚本/命令/别名

时间:2015-07-10 15:15:09

标签: bash shell osx-yosemite 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 VM未处于活动状态,则会失败。< / p>

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

1 个答案:

答案 0 :(得分: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'\'