2

Я должен выполнить сценарии внутри контейнера Docker, пример

composer install

или же

bin/another-script another-script-arg-1 another-script-arg-2

чтобы выполнить эту команду внутри контейнера, мне нужно выполнить что-то вроде (используя docker-compose)

sudo docker-compose exec container-name sh -c 'bin/another-script another-script-arg-1 another-script-arg-2'

Я хочу написать простой сценарий, который позволит мне сохранить некоторые опечатки и дополнительные штрихи для выполнения только отклонений предыдущей команды, поэтому я написал сценарий

#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'bin/another-script $@'"

Так что я могу выполнить на улице, просто

bin/another-script another-script-arg-1 another-script-arg-2

но не работает, просто скажите что-то вроде 'bin/another-script' не найдено (внутри контейнера). Я знаю, что это происходит, когда одинарные кавычки не передаются в части -c ''. Я пробовал разные вещи

#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c \'bin/another-script $@\'

или же

#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'bin/another-script $@'"

или же

#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'"bin/another-script "$@""'"

Редактировать: внутренний путь скрипта bin/another-script не является проблемой, потому что контейнер перемещается в рабочую директорию, в любом случае, когда я тестировал абсолютный путь, получался тот же результат /app/bin/another-script

#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'/app/bin/another-script $@'"

но ничего не работает, любой совет?

1 ответ1

3

После большого количества проб и ошибок. Я нашел способ, который работал, я не знаю, является ли это лучшим или правильным способом

#!/usr/bin/env bash

container_cmd="bin/another-script $@"
sudo docker-composer exec container-name sh -c "$container_cmd"

Я хотел бы знать, почему одиночные кавычки не нужны

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .