printf управляют необъяснимо выходным текстом запроса

Когда я выполняюсь printf на командной строке по некоторым причинам это включает мой текст запроса в вывод. Команда:

printf '%s\n' 'Some text'

Вывод:

' 'Some text' {~} (myusername@my-PC-name)Some text

Достаточно странно это только делает это, если я использую escape-последовательность новой строки в строке формата. Если я пропускаю это:

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 является желтым, и $ является зеленым.

Примечания о моей системе: Я выполняю Bash 4.3.48 на Ubuntu 16.04.3 LTS в моем Windows 10 (Осеннее Обновление Создателей) машина с помощью Windows Subsystem для Linux. Таким образом, это не полная настольная система Ubuntu, это - просто версия командной строки, доступная в Windows Store. Хотя я не уверен, имеет ли это значение для этой проблемы.

0
задан 3 January 2018 в 18:59

0 ответов

Другие вопросы по тегам:

Похожие вопросы: