gpt4 book ai didi

bash - Docker 容器内交互式 shell 上的源脚本

转载 作者:行者123 更新时间:2023-11-29 09:29:18 29 4
gpt4 key购买 nike

我想打开一个交互式 shell,它提供一个脚本以在我绑定(bind)挂载的存储库上使用 bitbake 环境:

docker run --rm -it \
--mount type=bind,source=$(MY_PATH),destination=/mnt/bb_repoistory \
my_image /bin/bash -c "cd /mnt/bb_repoistory/oe-core && source build/conf/set_bb_env.sh"

问题是 -it 参数似乎没有任何效果,因为 shell 在执行 cd/mnt/bb_repoistory/oe-core && source build/conf 后立即退出/set_bb_env.sh

我也试过这个:

docker run --rm -it \
--mount type=bind,source=$(MY_PATH),destination=/mnt/bb_repoistory \
my_image /bin/bash -c "cd /mnt/bb_repoistory/oe-core && source build/conf/set_bb_env.sh && bash"

它生成一个交互式 shell,但没有在 set_bb_env.sh 中定义的宏

是否有一种方法可以为 tty 提供正确来源的脚本?

最佳答案

-it 标志与要运行的命令冲突,因为您告诉 docker 创建伪终端 (ptty),然后在该终端中运行命令 ( bash -c ...).当该命令完成时,运行就完成了。

一些人为解决这个问题所做的工作是在他们的源代码环境中只使用export 变量,最后一个命令是exec bash。但是,如果您需要别名或其他无法继承的项目,那么您的选择就比较有限。

您可以在目标 shell 中运行它,而不是在父 shell 中运行源代码。如果您修改了 .bash_profile 以包含以下行:

[ -n "$DOCKER_LOAD_EXTRA" -a -r "$DOCKER_LOAD_EXTRA" ] && source "$DOCKER_LOAD_EXTRA”

然后你的命令是:

... /bin/bash -c "cd /mnt/bb_repository/oe-core && DOCKER_LOAD_EXTRA=build/conf/set_bb_env.sh exec bash"

这可能行得通。这会告诉您的 .bash_profile 在环境变量已设置时加载此文件,否则不会。 (在 docker 命令行上也可以有 -e 标志,但我认为这是为整个容器全局设置的,这可能不是你想要的。)

关于bash - Docker 容器内交互式 shell 上的源脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50237020/

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