Лучшая практика docker-entrypoint для выполнения скрипта - PullRequest
0 голосов
/ 31 августа 2018

Я хочу запустить пару скриптов на моем docker-entrypoint.sh;

Мой вопрос, имеет ли это какое-то значение, и если да, то каков рекомендуемый способ решения этой проблемы, относительно следующих параметров:

A .

${HOMEDIR}/myscript --param1 --param2

B .

bash -c "${HOMEDIR}/myscript --param1 --param2"

C .

source ${HOMEDIR}/myscript --param1 --param2

1 Ответ

0 голосов
/ 31 августа 2018

Это на самом деле зависит от того, что вы делаете и что вы пытаетесь сделать.

${HOMEDIR}/myscript --param1 --param2

Этот выполнит скрипт. По завершении сценария все изменения, внесенные в среду, отбрасываются.

bash -c "${HOMEDIR}/myscript --param1 --param2"

Запуск bash -c "my command here" и просто запуск my command here в основном отличаются тем, что первый запускает подоболочку, а второй запускает команды в текущей оболочке.

Существует ряд различий в эффектах, однако:

  • Изменения, внесенные в подоболочку, не могут повлиять на родительская оболочка (текущий каталог, значения переменных среды, определения функций и т. д.)

  • Переменные, установленные в родительской оболочке, которые не был экспортирован, будет недоступен в подоболочке.

Здесь - моя справка, так как я мало что знал о bash -c

source ${HOMEDIR}/myscript --param1 --param2

Когда вы вызываете источник (или его псевдоним), вы вставляете скрипт в текущий процесс bash. Таким образом, вы можете читать переменные, установленные скриптом.

Когда вы вызываете sh, вы запускаете форк (подпроцесс), который запускает новый сеанс / bin / sh, который обычно является символической ссылкой на bash. В этом случае переменные среды, установленные подпрограммой, будут удалены после завершения подпрограммы.

Также здесь моя ссылка.

TL; DR: Если вы не хотите, чтобы bash сохранял изменения, которые вы хотите использовать с теми скриптами, на которых вы будете работать, я рекомендую вам использовать ( A ). Если вы хотите, чтобы bash сохранял переменные и изменения, используйте ( C ). Если вы хотите сохранить изменения и заставить bash запустить скрипт на другом bash, используйте ( B ), поскольку я перечислил различия между ними.

...