【问题标题】:Adding a script/command/alias that uses command substitution添加使用命令替换的脚本/命令/别名
【发布时间】:2015-07-11 00:17:38
【问题描述】:

我有一个我希望能够运行的命令,我通常会在我的 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虚拟机没有激活它就会失败。

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

【问题讨论】:

    标签: bash shell osx-yosemite command-substitution


    【解决方案1】:

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

    这意味着在内部 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'\'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多