gpt4 book ai didi

bash - docker-entrypoint 脚本执行的最佳实践

转载 作者:行者123 更新时间:2023-12-02 18:21:13 27 4
gpt4 key购买 nike

我想在我的 docker-entrypoint.sh 上运行几个脚本;

我的问题是它是否有任何区别,如果有,推荐的解决方法是什么,关于以下选项:

一个 .

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

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

中号 .
source ${HOMEDIR}/myscript --param1 --param2

最佳答案

这实际上取决于你在做什么以及你想做什么。

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

这将执行脚本。脚本完成后,它对环境所做的任何更改都将被丢弃。
bash -c "${HOMEDIR}/myscript --param1 --param2"

运行 bash -c "my command here"与仅运行 my command here 相比主要不同之处在于前者启动一个子shell,后者在当前shell中运行命令。

但是,效果有许多不同之处:
  • 在 subshel​​l 中对环境所做的更改不会影响
    父外壳(当前目录,环境变量的值,
    函数定义等)
  • 在父 shell 中设置的变量
    尚未导出将在子 shell 中不可用。

  • Here是我的引用,因为我对 bash -c 了解不多
    source ${HOMEDIR}/myscript --param1 --param2

    当您调用 source(或其别名 .)时,您将脚本插入到当前 bash 进程中。所以你可以读取脚本设置的变量。

    当您调用 sh 时,您启动了一个运行/bin/sh 的新 session 的 fork(子进程),这通常是 bash 的符号链接(symbolic link)。在这种情况下,由子脚本设置的环境变量将在子脚本完成时被删除。

    还有 here我的引用。

    TL;DR:如果您不希望 bash 保留您将要运行的脚本的更改,我建议您使用 ( A )。如果您希望 bash 保留变量和更改,请使用 ( C )。如果您想保留更改并让 bash 在另一个 bash 上运行脚本,请使用 ( B ),因为我列出了它们之间的差异。

    关于bash - docker-entrypoint 脚本执行的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109846/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com