Ubuntu 16.04에서 GNU bash 버전 4.4.0(1)을 사용하고 있습니다.
bash에 긴 줄을 입력하면 디스플레이가 복잡해집니다.
예를 들어, 내가 다음과 같이
~/test/test/test/test/test/test/test
입력한다고 가정 해 보겠습니다 .echo "The quick brown fox jumps over the lazy doggo"
괜찮습니다. 비록 저는 랩어라운드 디스플레이를 선호하고 이중 코드 없이도 할 수 있습니다.
문제는 이제 백스페이스를 세 번 누르고 큰따옴표를 한 번 추가하여 문장을 수정하면 다음과 같이 표시된다는 것입니다.
마지막으로 o"
오류가 표시됩니다. Enter를 눌러 확인하세요.
dog
대신 에 원하는 문장이 인쇄된 것을 볼 수 있습니다 . doggo
하지만 무슨 이유에서인지 녹색으로 인쇄되어 있습니다.
이제 터미널 창을 몇 번 확대 및 축소하면 이 모든 것이 더욱 악화됩니다. 그런 다음 터미널의 내용이 무작위로 복사되어 전체 터미널에 연결됩니다. (길고 검은색 상자는 프롬프트 내용을 무작위로 연결한 것입니다.)
~/.bashrc
비록 내가 방금 했을지라도 이 모든 것이 관련 있을 수 있다고 생각 합니다 cp /etc/skel/.bashrc ~/
. 어쨌든, 여기 있습니다:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
~/.bashrc를 삭제하면 다음과 같은 결과가 나타납니다. ( echo "This is a really long sentence, even long than a sentence containing all letters of the alphabet"
더 짧은 프롬프트를 보완하기 위해 이 명령을 사용합니다.)
몇 단어를 제거한 후 줄 끝에 남은 내용이 표시됩니다.
또한 백스페이스 키를 계속 누르면 프롬프트의 일부를 삭제할 수도 있습니다.
Enter 키를 누르고 명령 끝을 로 수정한 후 [...], ev"
크기를 조정할 때 일반적인 혼란이 발생했습니다.
답변1
귀하의 팁에는 색상(및 기타 인쇄할 수 없는 콘텐츠)이 포함되어 있습니다.
\[
\]
Bash에서는 프롬프트 길이를 계산할 때 이러한 부분을 로 둘러싸서 bash에게 이 부분을 무시하도록 지시할 수 있습니다 .
전임자:
PS1="\e[33mthis is green\e[0m this is normal"
# should be done as:
PS1="\[\e[33m\]this is green\[\e[0m\] this is normal"
두 번째 주위의 \[
각 부분은 \]
색상을 변경할 때 디스플레이에 보이는 문자를 추가하지 않으므로 프롬프트에서 문자 위치를 계산할 때 계산되어서는 안 됩니다.
\[
PS1을 수정한 경우 눈에 보이는 문자를 넣지 않도록 하세요 \]
. 그렇다면 제외하십시오.
shopt -q -s checkwinsize
또 다른 사항: 크기 조정 시 터미널 크기가 업데이트되는지 확인 하고 싶을 수도 있습니다 .
그리고 현재 입력된 명령줄의 끝만 표시하는 설정을 사용하고 있는 것 같습니다(ksh가 수행하는 것과 유사합니다... bash를 사용하고 있습니까?). 이를 변경하려면 어떤 옵션이 있는지 살펴보겠습니다. 하지만 아직은 모르겠어요.
편집하다
채팅 중에 우리는 다음 사항에 대해서도 논의했습니다.
set -o emacs #he was in vi mode
set -o posix #he was in posix=no mode
하지만 결국 효과가 있는 것 같았던 것은 ~/.inputrc를 제거하는 것이었습니다. (그가 그렇게 했습니다. 잘못된 내용이 포함될 수 있지만 그 내용이 무엇인지 모르겠고 삭제하라는 요청도 받지 않았습니다 ^^ 그냥 이름을 바꾸세요. ) (또는 내용 수정)이 도움이 될 것입니다...)
답변2
@OlivierDulac의 도움으로 ~/.bashrc
및 를 변경하여 이 문제를 해결했습니다 ~/.inputrc
.
~/.bashrc
현재 사용 중인 경우 :
PS1='\e[01;32m\u:\e[01;34m\w\e[0m\$ '
색상을 생성하기 위해 \033을 \e로 바꿨습니다. 원래 PS1에서 이렇게만 해도 고쳐지지 않아서 뭔가 다른 문제가 있는 것 같은데 너무 피곤해서 찾아볼 수가 없네요. 나는 (많은 조언에도 불구하고, PS1을 만들 때 사용한 ezprompt.net에도 불구하고) 인쇄되지 않는 문자를 사용하거나 포함 \[
하지 않는다는 사실을 믿습니다. \]
사실, 실제로 이것을 사용하면 모든 것이 다시 엉망이 됩니다.
에 ~/.inputrc
, 전에도 먹어본 적이 있어요
#These lines make the vi mode visible by switching from a block cursor to a line cursor.
set show-mode-in-prompt on
[...]
set vi-cmd-mode-string \1\e[1 q\2
set vi-ins-mode-string \1\e[5 q\2
\1
방금을 (를) 제거했는데 \2
이제
set editing-mode vi
[...]
set show-mode-in-prompt on
set vi-cmd-mode-string \e[1 q
set vi-ins-mode-string \e[5 q
다시 말하지만, 이는 제가 다른 곳에서 권장한 것과 반대입니다. 아마도 비교적 새로운 버전의 bash를 사용하고 있기 때문일까요? ( set show-mode-in-prompt on
bash4.4 afaik에만 해당)
답변3
단말기 설정(단말기 종류)이 정확합니까? 내 우분투 Linux 호스트에서 내 터미널 유형은 "ansi"입니다. (이 정보는 echo $TERM 명령을 실행하여 얻을 수 있습니다.) 터미널 유형은 사용 중인 화면(콘솔)과 일치해야 합니다. 가끔 터미널 유형이 잘못된 경우 터미널/콘솔이 터미널 이스케이프 코드(예: 커서 제어)를 인식하지 못하여 화면 출력이 왜곡되는 경우가 있습니다. 다른 표준 터미널 유형에는 "vt100" 및 "vt220"이 포함됩니다.
답변4
변화
TERM=xterm-256color
도착하다
TERM=xterm