【问题标题】:ddev exec: command not found (.bash_aliases)ddev exec:找不到命令(.bash_aliases)
【发布时间】:2020-02-13 22:18:39
【问题描述】:

在一个本地的 ddev 实例中,我为 .ddev/homeadditions/bash_aliases 添加了一些别名和函数。

例如:alias ll="ls -lhA"

虽然ddev sshll 会起作用,但ddev exec ll 会返回

bash: ll: command not found
Failed to execute command ll: exit status 127

为什么?

【问题讨论】:

    标签: ddev


    【解决方案1】:

    这真的是关于 bash 的工作原理,而不是 ddev 的工作原理。 .bashrc(以及因此由 .bashrc 加载的 .bash_aliases)仅由 interactive shell(如ddev ssh 之类的上下文)加载。这是一个 Stack Overflow 的答案:Why aliases in a non-interactive Bash shell do not work

    ddev exec 只是做一个bash -c "<your command>",而bash -c 在设计上是非交互式的。

    您可以考虑添加 ddev 自定义 Web 命令来处理您离不开的东西。

    ddev ll 自定义命令可以像这样工作。在 .ddev/commands/web 中创建一个名为“ll”的文件,其中包含内容

    #!/bin/bash
    
    ## Description: Run ls -l inside web container
    ## Usage: ll [flags] [arguments]
    ## Example: "ddev ll"  or `ddev ll /tmp`
    
    ls -l $@
    

    【讨论】:

    • 难以置信!!有用!它看起来也更加严重。非常感谢。
    • 我已经在下面发布了我的用例
    • PS:要重新加载./ddev/docker-compose.env.yaml,我必须ddev restart,对吧?
    【解决方案2】:

    这是我的设置示例(实际上,我的脚本不仅仅是ll

    .ddev/docker-compose.env.yaml

    version: '3.6'
    
    
    services:
      web:
        environment:
        - PROD_USER=foo
        - PROD_SERVER=bar.com
        - PROD_ROOT=path/to/root
        - LOCAL_ROOT=that/path/to/root
        - ASSET_DIRS=bi ba bu
    

    .ddev/commands/web/sync_down_files

    #!/bin/bash
    
    # rsync prod assets to local
    
    # download all assets
    for directory in ${ASSET_DIRS} ; do
        rsync -zra \
            --delete \
            --exclude='.env' \
            ${PROD_USER}@${PROD_SERVER}:/home/${PROD_USER}/${PROD_ROOT}/$directory \
            ${LOCAL_ROOT};
    done
    

    现在我执行ddev sync_down_files 并将所有远程资产放入本地站点。数据库也一样。

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      相关资源
      最近更新 更多