当我在命令行上执行时printf
,由于某种原因,它会在输出中包含我的提示文本。命令:
printf '%s\n' 'Some text'
输出:
' 'Some text' {~} (myusername@my-PC-name)Some text
奇怪的是,只有当我在格式字符串中使用换行符转义序列时,它才会这样做。如果我省略它:
printf '%s' 'Some text'
我得到:
Some text
我的提示设置肯定有问题。下面是我的 .bashrc 文件中的片段。大部分代码都随文件一起提供。我删除了文件附带的注释,并添加了注释以表明我的修改:
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
color_prompt=yes
else
color_prompt=
fi
fi
# I added these lines:
black="\[\033[0;30m\]"
blue="\[\033[0;34m\]"
green="\[\033[0;32m\]"
cyan="\[\033[1;36m\]"
red="\[\033[0;31m\]"
magenta="\[\033[0;35m\]"
yellow="\[\033[1;33m\]"
gray="\[\033[0;37m\]"
reset_color="\[\033[00m\]"
# end of my additions
if [ "$color_prompt" = yes ]; then
# I added the following two lines:
user_host_color="$cyan"
path_color="$yellow"
# Below is the original line assigning PS1:
# PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# Below is my version:
PS1="${debian_chroot:+($debian_chroot)}${user_host_color}\u@\h${reset_color}:${path_color}\w${reset_color}\\$ "
# My addition below: unsetting some variables I added
unset user_host_color path_color
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# My addition below: unsetting variables I added
unset black blue green cyan red magenta yellow gray reset_color
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
这会产生如下颜色提示:myusername@my-PC-name:/current/path $
,其中myusername
为绿色,my-PC-name
为蓝色,/current/path
为黄色,$
为绿色。
关于我的系统的说明:我在 Windows 10(秋季创意者更新)机器上通过 Windows Subsystem for Linux 在 Ubuntu 16.04.3 LTS 上运行 Bash 4.3.48。因此,这不是完整的 Ubuntu 桌面系统,它只是 Windows Store 上提供的命令行版本。虽然我不确定这对这个问题是否重要。