【问题标题】:How can I set $PS1 with Dockerfile?如何使用 Dockerfile 设置 $PS1?
【发布时间】:2016-09-12 06:08:37
【问题描述】:

如何在 Dockerfile 中设置 PS1 环境变量(bash 提示符)?
我尝试了ENV PS1 "\h:\W \u$ "
但是这个命令不会改变提示。
不知道为什么上面ENV没有设置PS1提示。
我该怎么做?

【问题讨论】:

  • 在容器中粘贴.bashrc等文件?正常的shell启动设置是直接PS1吗?这将覆盖环境中的任何内容。

标签: bash docker environment-variables dockerfile


【解决方案1】:

这里发生的情况是 PS1 正在由您的映像中的文件 ~/.bashrc 重新定义,并在您的容器启动时自动获取(它可能在另一个文件上 - 我不确定 PS1 是否总是被定义在所有 Linux 发行版的 ~/.bashrc 中)。

假设它是在~/.bashrc 中定义的,那么你可以在你的 Dockerfile 中编写一个RUN 命令,如下所示:

RUN echo PS1=\"\\h:\\W \\u$ \" >> ~/.bashrc

瞧!

【讨论】:

  • 如果您正在寻找彩色的:RUN echo "PS1='\${debian_chroot:+(\$debian_chroot)}\\[\033[01;32m\\]\\u@\\H\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '" >> ~/.bashrc
  • 如果没有主目录也没有 .bashrc 文件怎么办?
  • @JohnSmithOptional 见这里:unix.stackexchange.com/a/48872/218427
【解决方案2】:

简单的ENV PS1=... 不起作用,因为 PS1 稍后在.bashrc 文件中重新定义。这是一个无需转义 PS1 字符串的简单解决方案:

ENV PS1A="[\d \[\e[33m\]\t\[\e[m\]] \[\e[31m\]\u\[\e[m\]@\[\e[31m\]\h\[\e[m\] \[\e[36m\]\w\[\e[m\]\n $ "

RUN echo 'PS1=$PS1A' >> ~/.bashrc

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 2014-12-28
    • 1970-01-01
    • 2013-01-29
    • 2015-11-15
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多