Лучшая практика docker-entrypoint для выполнения скрипта

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

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

А.

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

Б.

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

C.

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

1 ответ

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

${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), поскольку я перечислил различия между ними.

Другие вопросы по тегам