Bash - Проверить, если данный аргумент завершен - PullRequest
0 голосов
/ 24 января 2020

У меня есть отдельный сценарий оболочки, который запускает мою docker -компонентную среду в подключенном режиме или отключается, если я передаю аргумент -d или --detach. Он отлично работает, когда я передаю этот аргумент (./run-env.sh -d), но не работает, когда я запускаю свой сценарий без какой-либо опции (./run-env, просто получаю пустой вывод и docker -compose не запускается), где это может быть проблема?

#!/usr/bin/env bash

for arg in "$@"; do
    if [ "$arg" = '-d'  ] || [ "$arg" = '--detach'  ]
    then
         docker-compose  -f docker-compose.local-environment.yml up --build -V --detach
    else
         docker-compose  -f docker-compose.local-environment.yml up --build -V --abort-on-container-exit
    fi
done

Ответы [ 2 ]

4 голосов
/ 24 января 2020

Когда вы не приводите аргумент, вы даже не вводите for l oop, поэтому ничего не происходит.

#!/usr/bin/env bash

# By default, use '--abort-on-container-exit' option
abort_or_detach="--abort-on-container-exit"

# Search for a parameter asking to run in detached mode
for arg in "$@"; do
    if [ "$arg" = '-d'  ] || [ "$arg" = '--detach'  ]
    then
         abort_or_detach="--detach"
    fi
done

# Run with the correct option
docker-compose -f docker-compose.local-environment.yml up --build -V $abort_or_detach

Здесь, в этом сценарии, вы вызываете один раз docker-compose, и вы можете легко управлять опциями с помощью for l oop

Кроме того, с первой попытки вы запустите docker-compose столько раз, сколько у вас различных параметров. Здесь вы относитесь к ним, а затем делаете один запуск

2 голосов
/ 24 января 2020

for arg in "$@" перебирает аргументы. Когда вы не передаете аргументы, он повторяется ноль раз. Вместо этого попробуйте что-то вроде:

extra=--abort-on-container-exit
for arg; do
    case "$arg" in
    -d|--detach) extra=--detach
    esac
done

docker-compose  -f docker-compose.local-environment.yml up --build -V $extra

Обратите внимание, что это один из тех случаев, когда вы не хотите поместить кавычки вокруг $extra, потому что если extra пусто строка, которую вы не хотите передавать в docker -compose. (Здесь значение по умолчанию гарантирует, что оно не пустое, но это довольно распространенный шаблон, и в некоторых случаях это будет пустая строка.)

...