gpt4 book ai didi

centos - bash TAB 完成在 centos 8 上不起作用

转载 作者:行者123 更新时间:2023-12-04 19:36:13 25 4
gpt4 key购买 nike

我在 docker 上运行一个 centos 8 发行版,我想用 dnf 完成 bash TAB包管理器。根据其他帖子,我的 docker 容器启动后,我执行了以下操作:

dnf clean all && rm -r /var/cache/dnf && dnf upgrade -y && dnf update -y

接着
dnf install bash-completion sqlite -y

之后我重新启动容器,但仍然没有完成 bash。我还尝试通过执行以下操作直接获取 bash 完成文件:
source /etc/profile.d/bash_completion.sh

但没有任何更好的效果。

你知道我做错了什么吗?

最佳答案

您不应该在 Docker 容器中需要 BASH 完成。您应该手动连接到 Linux 容器内的 shell 的唯一时间是排查为什么在容器中运行的进程行为异常。事实上,一些容器设计建议甚至可能会建议您根本不要在基本操作系统中包含外壳!

这对您不起作用的原因是 Linux 容器的运行方式。一个 Container只是一个 namespaced由安装在主机操作系统上的内核管理的进程。该进程不能被修改或中断,否则容器将被销毁,因为该进程将被发送一个 SIGTERM .当您尝试 source bash_completion.sh脚本,您正在尝试将新的配置参数传递给由 Docker 管理的现有命名空间进程。

如果您真的想这样做,最好的方法是基于原始 CentOS 8 基础镜像创建一个新的 Docker 容器镜像。然后从那里安装 bash 完成包并添加 echo命令将源代码行添加到用户的 .bashrc文件。

编辑:

关于在此答案的评论中向 OP 提出的其他问题,我在下面添加了其他信息。

Why should not I need bash completion in a container



您不需要在容器中完成 bash 的原因是容器并不意味着与外壳相连。 A 应该是在特定配置标准下运行的进程的单个实例。容器不是用来创建开发环境供你连接的,它们是用来在软件基础设施中运行进程和应用程序的。

Manually updating & installing packages



您提到启动容器时要做的第一件事就是安装软件包。这也让我感到震惊,因为您根本不应该手动与容器交互。这包括软件包安装。相反,您应该从旧的 Base Image 生成新的容器镜像。并将额外的 RUN 语句添加到 Dockerfile更新系统并安装这些所需的软件包。

Cannot believe it is not possible



如果您创建一个新的 Dockerfile 并故意将其安装在新的 layer 上,这是可能的。基础镜像并生成一个新的容器镜像供您使用。但关键是,您不应该一开始就连接到 Docker 容器,甚至到了可能需要诸如 bash 完成之类的东西的地步!

这是关于容器和虚拟机之间区别的一个很好的总结,可能有助于为您阐明其中的一些内容。简而言之,容器应该运行并且只运行进程。

关于centos - bash TAB 完成在 centos 8 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60881424/

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