【问题标题】:unreadable zsh shell and backspace not work on zsh shell on Docker不可读的 zsh shell 和退格在 Docker 上的 zsh shell 上不起作用
【发布时间】:2015-05-19 08:47:55
【问题描述】:

我使用了FROM rails:onbuild 图片

  • 您可以在此处看到错误/不可读的编码

  • 当我在 test 之后键入退格键时,它不起作用,它在 shell 上附加了空格

这里是环境变量,

对这个错误有什么想法吗?

RUBY_MAJOR=2.2
RUBY_VERSION=2.2.2
RUBY_DOWNLOAD_SHA256=5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44
GEM_HOME=/usr/local/bundle
BUNDLE_APP_CONFIG=/usr/local/bundle
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_ALL=en_US.UTF-8
HOME=/root
LOGNAME=root
SHLVL=1
PWD=/associate-app
OLDPWD=/associate-app
ZSH=/root/.oh-my-zsh
PAGER=less
LESS=-R
LSCOLORS=Gxfxcxdxbxegedabagacad
_=/usr/bin/env

DOCEKRFILE(这是我的 docker 文件)

FROM rails:onbuild
RUN apt-get update && apt-get -y upgrade
RUN apt-get -y -qq --force-yes install \
        build-essential \
        tree \
        locales \
        ruby-dev \
        vim \
        vim-scripts \
        git \
        git-flow\
        curl \
        zsh \
        sudo



# Install Zsh
RUN git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh \
      && cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc \
      && chsh -s /bin/zsh

RUN sed -i -E "s/^plugins=\((.*)\)$/plugins=(\1 git git-flow ruby tmux)/" ~/.zshrc


# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissions
ADD id_rsa /root/.ssh/id_rsa
# Create known_hosts
RUN touch /root/.ssh/known_hosts
# Add bitbuckets key
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts


RUN echo "alias ls='ls --color=auto'" >> /etc/zsh/zshrc && \
    echo "alias ll='ls -halF'" >> /etc/zsh/zshrc && \
    echo "alias ls='ls --color=auto'" >> /etc/profile && \
    echo "alias ll='ls -halF'" >> /etc/zsh/zshrc

# copy GEMFILE
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install

RUN mkdir /associate-app
WORKDIR /associate-app
ADD . /associate-app

RUN locale-gen en_US.UTF-8  
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8  
CMD echo 'LC_ALL=en_US.UTF-8' >> ~/.zshrc && \
    echo 'LANG=C.UTF-8' >> ~/.zshrc && \
    echo 'LC_CTYPE=en_US.UTF-8' >> ~/.zshrc && \
CMD ["zsh"]

stty -a

speed 38400 baud; rows 40; columns 164; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke    

【问题讨论】:

    标签: linux docker zsh boot2docker


    【解决方案1】:

    您的本地设置不一致

    LANG=en_US.UTF-8
    LANGUAGE=en_US:en
    LC_ALL=en_US.UTF-8
    

    也就是说,LANGUAGE 没有使用 UTF-8,而其他设置正在这样做。

    这可能是问题的一部分。

    此外,一些终端实现了stty 的iutf8 设置。这告诉终端驱动程序如何调整多字节(UTF-8)字符的光标位置。您可以检查stty -a 是否显示-iutf8(功能已禁用),如果不是,则启用它,例如,

    stty -a
    stty iutf8
    

    当该功能可用时,终端驱动程序知道它应该考虑文本是否使用 UTF-8(并且每列可能有多个字节)。如果没有,它会将每个字节计为一列,并且在擦除“最后一个”字符时,可能会执行以下操作:

    backspace space space
    

    产生如上所示的效果。

    最后,很高兴知道实际使用的终端。例如,rxvt 不支持 UTF-8; xterm 可以使用/不使用 UTF-8 进行配置。 TERM 的值在很大程度上无关紧要,因为您的 shell 可能会忽略它而支持内置行为。

    【讨论】:

    • 您可以在使用docker exec -it my_container bash 进入您的容器时发布echo $TERM 吗?
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2014-08-24
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多