ddev exec: команда не найдена (.bash_aliases)

В локальном экземпляре ddev я добавил несколько псевдонимов и функций в .ddev/homeadditions/bash_aliases.

Например: alias ll="ls -lhA"

Пока ddev ssh, а затем ll будут работать, ddev exec ll возвращается

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

Почему?


person Urs    schedule 13.02.2020    source источник


Ответы (2)


Это действительно о том, как работает bash, а не о том, как работает ddev. .Bashrc (и, следовательно, .bash_aliases, который загружается .bashrc) загружается только интерактивными оболочками (контекстами типа ddev ssh). Вот ответ на него по переполнению стека: Почему псевдонимы в неинтерактивной оболочке Bash не работают

ddev exec просто выполняет bash -c "<your command>", а bash -c по своей задумке не интерактивен.

Вы можете подумать о добавлении пользовательских веб-команд ddev для вещей, без которых вы не можете жить.

Пользовательская команда ddev ll может работать так. Создайте файл с именем "ll" в .ddev / commands / web с содержимым

#!/bin/bash

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

ls -l $@
person rfay    schedule 15.02.2020
comment
Невероятный!! Оно работает! К тому же это выглядит намного серьезнее. Большое спасибо. - person Urs; 16.02.2020
comment
Я разместил свой вариант использования ниже - person Urs; 16.02.2020
comment
PS: чтобы перезагрузить ./ddev/docker-compose.env.yaml, мне нужно ddev restart, верно? - person Urs; 16.02.2020

Вот пример моей настройки (на самом деле у меня скриптов больше, чем просто 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 / команды / 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 и помещаю все удаленные ресурсы на локальный сайт. То же самое для db.

person Urs    schedule 16.02.2020