Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bashrc不处理文本换行_Bash_Ssh - Fatal编程技术网

bashrc不处理文本换行

bashrc不处理文本换行,bash,ssh,Bash,Ssh,我在.bashrc中找到了一个很好的自定义项,用于提示显示额外信息并提供颜色高亮显示。以下是我所拥有的: # ----- Define a few Colors BLACK='\e[0;30m' BLUE='\e[0;34m' GREEN='\e[0;32m' CYAN='\e[0;36m' RED='\e[0;31m' PURPLE='\e[0;35m' BROWN='\e[0;33m' LIGHTGRAY='\e[0;37m' DARKGRAY='\e[1;30m' LIGHTBLUE='\

我在.bashrc中找到了一个很好的自定义项,用于提示显示额外信息并提供颜色高亮显示。以下是我所拥有的:

# ----- Define a few Colors
BLACK='\e[0;30m'
BLUE='\e[0;34m'
GREEN='\e[0;32m'
CYAN='\e[0;36m'
RED='\e[0;31m'
PURPLE='\e[0;35m'
BROWN='\e[0;33m'
LIGHTGRAY='\e[0;37m'
DARKGRAY='\e[1;30m'
LIGHTBLUE='\e[1;34m'
LIGHTGREEN='\e[1;32m'
LIGHTCYAN='\e[1;36m'
LIGHTRED='\e[1;31m'
LIGHTPURPLE='\e[1;35m'
YELLOW='\e[1;33m'
WHITE='\e[1;37m'

function __setprompt {
  local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
  local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
  if [ $SSH2_IP ] || [ $SSH_IP ] ; then
    local SSH_FLAG="@\h"
  fi
  PS1="$CYAN[\u$SSH_FLAG:$BROWN\w$CYAN]\\$ $NOCOLOR"
  PS2="$CYAN>$NOCOLOR "
  PS4='$CYAN+$NOCOLOR '
}
__setprompt
我遇到的问题是它不能正确处理包装文本(见下面的屏幕截图)。有人能就可能出现的问题提供一些建议吗?看起来它根本不会调整用户输入的内容


青色
棕色
vars的值是多少?
您很可能忘记将它们包装在
\[
\]

将它们标记为非打印字符

如果您的
CYAN

CYAN="\e[0;36m"
您需要将其包装在
\[
\]
中,如

CYAN="\[\e[0;36m\]"

否则,将变量本身包装在提示变量中,如

PS2="\[$CYAN\]>\[$NOCOLOR\] "
请参见此处的评论:

function __setprompt {
  local SSH_IP="${SSH_CLIENT%% *}"      # no need for echo/awk/sed
  local SSH2_IP="${SSH2_CLIENT%% *}"    # use parameter expansion instead
  if [[ -n "$SSH2_IP" || -n "$SSH_IP" ]]; then  # bash uses double brakets
    local SSH_FLAG="@\h"                        # and the OR operator works inside
  fi
  PS1="\[$CYAN\][\u$SSH_FLAG:\[$BROWN\]\w\[$CYAN\]]\\$ \[$NOCOLOR\]"  # dont mess with [ and ]
  PS2="\[$CYAN\]>\[$NOCOLOR\] "                                       # only wrap color vars in \[ and \]
  PS4="\[$CYAN\]+\[$NOCOLOR\] "                 # single quotes will not expand $vars
}
__setprompt

另外,请查看
PROMPT\u命令
变量

提示_命令
如果已设置,则在发出每个主提示之前,该值将作为命令执行


还请注意,按照惯例,大写变量名将保留供环境使用

终端客户端使用的是什么?看起来这可能是终端模拟的问题,而不是提示的问题。我正在使用Putty,但这个问题只有在我实现了这个bashrc更改后才出现。我在原始帖子中添加了我的颜色。。。我也在网上找到了这些颜色。看起来他们缺少一个尾随
]
[`]
表示什么?为什么在缺少一块的情况下它仍然工作?不,
[
]
很好,您需要将每个颜色变量包装在
\[
\]
中,请参阅我的更新答案