我该如何在Dockerfile中设置$PS1?

9

我该如何在Dockerfile中设置PS1环境变量(bash提示符)?
我尝试使用 ENV PS1 "\h:\W \u$ "
但是这个命令没有改变提示符。
我不知道为什么上述的ENV没有设置PS1提示符。
有什么方法可以做到吗?


.bashrc等文件放入容器中?正常的shell启动设置是直接使用PS1吗?这将覆盖环境中的任何设置。 - Etan Reisner
2个回答

9
这里发生的情况是,PS1被文件~/.bashrc重新定义,该文件位于您的镜像中,并在容器启动时自动加载(它可能在另一个文件中 - 我不确定所有Linux发行版上是否始终在~/.bashrc中定义PS1)。
假设它在~/.bashrc中定义,则您可以在Dockerfile中编写一个RUN命令,看起来像这样:
RUN echo PS1=\"\\h:\\W \\u$ \" >> ~/.bashrc

完成了!


1
如果你想要一个有颜色的:RUN echo "PS1='\${debian_chroot:+(\$debian_chroot)}\\[\033[01;32m\\]\\u@\\H\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '" >> ~/.bashrc - j0k
1
如果没有主目录和.bashrc文件怎么办? - John Smith Optional
1
@JohnSmithOptional 请在此查看:https://unix.stackexchange.com/a/48872/218427 - anothermh

1

简单的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接