2017-07-27 70 views
0

我知道这可能是一个愚蠢的问题... 我想从docker文件中执行docker。问题是,当我使用docker run -it docker_name/bin/bash进入docker时,我没有完成命令行。 所以我做了这个https://docs.docker.com/machine/completion/(仍然不工作),并想要这样做https://linuxconfig.org/tab-does-not-automatically-complete-docker-commands-solution在docker中使用sed替换路径

事情是,我无法从泊坞窗文件中取代几行。我想使用这样的命令sed:RUN sed -i 's+#if ! shopt -oq posix; then+if ! shopt -oq posix; then+g' /etc/bash.bashrc,但它不工作以替换包含路径的行(我得到错误sed:-e表达式#1,字符75:未终止的'命令)。

我也试过RUN sed -i 's+\# if [ -f \/usr\/share\/bash-compl+ if [ -f \/usr\/share\/bash-compl+g' /etc/bash.bashrc但得到了同样的结果。

在dockerfile中使用sed的好方法是什么,或者在dockerfile的未来docker中更新文件的好方法是什么?

------------- ------------编辑

对不起,我忘了分享我dockerfile。

第一线如下:

FROM nvidia/cuda:8.0-devel-ubuntu14.04 

RUN apt-get update && apt-get install --yes --force-yes \ 
    software-properties-common build-essential wget curl git pkg-config cmake-curses-gui vim nano doxygen libboost-all-dev libeigen3-dev libflann-dev freeglut3-dev libglew-dev 
# to get cmake3.0 
RUN add-apt-repository ppa:george-edison55/cmake-3.x 
RUN apt-get update && apt-get install --yes --force-yes \ 
    cmake 

RUN apt-get install --yes --force-yes \ 
    g++ python 

# Intall some basic GUI tools 
RUN apt-get install --yes --force-yes \ 
     cmake-qt-gui gnome-terminal 

我想编辑在泊坞窗文件/etc/bash.bashrc,所以我做:

RUN sed -i 's+#if ! shopt -oq posix; then+if ! shopt -oq posix; then+g' /etc/bash.bashrC#this works 
RUN sed -i 's+\# if [ -f \/usr\/share\/bash-compl+ if [ -f \/usr\/share\/bash-compl+g' /etc/bash.bashrC#this does not work and provide the previous error 
+0

如果可能,请分享您的Dockerfile。如果不是你使用的是什么基础图像? – t6nand

+0

当然,我编辑了我的问题来提供它。 – Bastienm

回答

3

's+# if \[ -f /usr/share/bash-compl+ if \[ -f /usr/share/bash-compl+g'应解析。

您需要将方括号[转义为\[。方括号允许在sed中对字符进行分组,所以它们不会与字面括号相匹配,除非被转义。

如果继续使用s+++而不是s///,则不需要转义正斜杠。

+0

Thx现在正在工作:-) – Bastienm