我试图自动完成一项应该是一项相当简单的任务,但我无法找到合适的标志/方法。
我自动化了一堆docker容器,我想知道我以某种人类可读的形式使用哪个shell。
所以,我开始/创建一个容器:
docker run -v /home/igor/Downloads:/home/Downloads/ -h debian7 -p 8081:8080 -itd --name igorDebian72 debian:7
然后尝试进入它已经很好地改变了提示和颜色的bash:
sudo docker exec -ti igorDebian72 /bin/bash -c "`export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "`"
但是,这似乎"运行"命令并退回到主机,因此它没用。
如果我分开运行这两件事:
sudo docker exec -ti igorDebian72 /bin/bash
这让我进入容器bash,然后:
export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "
给我我想要的东西。带有可见容器名称的Bash提示符和与主机不同的颜色。
如何在一条线上实现这一目标?
P.S。在此期间并使用此处的评论,我试过这个:
sudo docker exec -ti igorDebian72 bash --rcfile <(echo 'export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "')
sudo docker exec -ti igorDebian72 bash --rcfile <(export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m ")
它仍然存在于bash中,但似乎脚本没有被执行。
我尝试将其保存在.sh文件中,然后执行此操作:
sudo docker exec -ti igorDebian72 bash --rcfile <(echo trueColors.sh)
同样,保留在容器中,但不运行脚本。
答案 0 :(得分:0)
docker exec
命令旨在将进程运行到容器中,然后在进程完成时退出。
在第一种情况下,您正在运行导入完成后结束的/bin/bash -c 'export ....'
。这就是您从终端退出的原因。
在第二个中,您正在运行仅在您关闭终端时退出的/bin/bash
。您将无法在同一行中执行这两项操作。你能做的是:
将PS1=....
放入dockerfile
作为ENV PS1 \e....
,以便在运行容器时设置环境变量
然后使用docker exec /bin/bash to enter the container and run command into it manually