Я хотел дать свою терминальную подсказку в Ubuntu более персональный взгляд и хотел изменить текст до '$' при записи команды.
Из того, что я нашел, что это сделано путем редактирования .bashrc файла в корневом каталоге, таким образом, я пошел туда и изменился
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
кому:
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='\e[1;32m[\W]\$ \e[m'
fi
Это работает, и терминал выглядит способ, к которому я хочу его.
Но через какое-то время при вводе нескольких команд, когда я использую ключ стрелки для получения до истории команд, вещи становятся странными.
От чистой строки и нажатия клавиши стрелки работы. При нажатии ее снова текст, который был на строке, ограничивается приблизительно в ~15 символах и новой команде в истории (который, как предполагается, отображен), ограничивается несколькими символами в начале, и они - вид объединенных вместе на командной строке.
Например, мои две новых команды
Java Test4 words-250.txt words-250-in.txt
Javac Test4.java
При нажатии клавиши стрелки однажды, отображена первая строка, как она должна. При нажатии его во второй раз, это отображено:
Java Test4 worc Test4.java
Несмотря на этот странный вывод, терминал хорошо работает. Если, например, я нажму Enter после выполнения вышеупомянутого, то Javac Test4.java будет работать. Если я вместо этого пытаюсь удалить всю строку с помощью клавиши Backspace, я только могу удалить вплоть до строки, говорит
Java Test4
и при нажатии Enter после этого я получаю новую пустую строку, так же, как если бы строка была пуста при нажатии Enter.
Все это уходит, если я сбросил .bashrc файл.
Почему это происходит и как я могу зафиксировать его?
Я понятия не имею, почему (никогда действительно понял управляющие коды), но адаптация другой подсказки, кажется, работает:
PS1='\[\033[1;32m\][\W]\$ \[\033[00m\]'
По-видимому, необходимо включить escape-последовательности в \[...\]
, сказать удару не считать их при определении быстрой ширины. Поэтому и вышеупомянутое PS1 и следующее работали бы одинаково хорошо:
PS1='\[\e[1;32m\][\W]\$ \[\e[m\]'