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