Сценарии оболочки - как вызвать python команд оболочки в операторе if - PullRequest
0 голосов
/ 19 апреля 2020

Я сейчас пишу на своем docker -входном пункте. sh скрипт. Скрипт определяет service_type, который является env. переменная, в зависимости от возвращаемого значения, фактический запуск приложения будет отличаться.

в операторе if У меня есть несколько команд, чтобы проверить, готов ли ландшафт для использования. Я также использую Python здесь, но всегда сталкиваюсь с следующей проблемой:

/ usr / local / bin / docker -entrypoint. sh: строка 128: предупреждение: здесь- документ в строке 30, разделенный концом файла (требуется `EOF ')

/ usr / local / bin / docker -entrypoint. sh: строка 129: синтаксическая ошибка: неожиданный конец файла

docker -entrypoint. sh:

#!/usr/bin/env bash

############### App ###############

if [ "$SERVICE_TYPE" = "app" ]
then
  echo "I'm a Application instance, Hello World!"

  ...

  echo "Checking if System User is setup"
  {
  python manage.py shell <<-EOF
  from django.contrib.auth import get_user_model

  User = get_user_model()  # get the currently active user model
  User.objects.filter(user='$SYS_USER').exists() or User.objects.create_superuser('$SYS_USER', '$SYS_USER')
  EOF
  }

  ...

############### Celery Worker ###############

elif [ "$SERVICE_TYPE" = "celery-worker" ]
then
  echo "I'm a Celery Worker instance, Hello World!"

  ...

############### Celery Beat ##################

elif [ "$SERVICE_TYPE" = "celery-beat" ]
then
  echo "I'm a Celery Beat instance, Hello World!"
  ...


fi

Как я могу выполнить мой python shell cmd в операторе if, чтобы я в основном имел тот же результат как если бы я не использовал его в операторе if:

echo "Checking if System User is setup"
{
cat <<EOF | python manage.py shell
from django.contrib.auth import get_user_model

User = get_user_model()  # get the currently active user model
User.objects.filter(user='$SYS_USER').exists() or User.objects.create_superuser('$SYS_USER', '$SYS_USER')
EOF
}

1 Ответ

2 голосов
/ 19 апреля 2020

Здесь-до c конечные токены не могут иметь начальный пробел. Также ваш сценарий внутри heredo c не должен иметь начальных пробелов

#!/usr/bin/env bash

############### App ###############

if [ "$SERVICE_TYPE" = "app" ]
then
  echo "I'm a Application instance, Hello World!"

  echo "Checking if System User is setup"
  {
  python manage.py shell <<-EOF
from django.contrib.auth import get_user_model

User = get_user_model()  # get the currently active user model
User.objects.filter(user='$SYS_USER').exists() or User.objects.create_superuser('$SYS_USER', '$SYS_USER')
EOF
  }

############### Celery Worker ###############

elif [ "$SERVICE_TYPE" = "celery-worker" ]
then
  echo "I'm a Celery Worker instance, Hello World!"

############### Celery Beat ##################

elif [ "$SERVICE_TYPE" = "celery-beat" ]
then
  echo "I'm a Celery Beat instance, Hello World!"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...