Терминал Bash не переносит текст правильно

Терминал Bash не переносит текст правильно

Я использую gnome-terminalbash, и когда у меня есть команда, которая должна перейти через строку, она просто остается на той же строке. Поэтому вместо:

echo "abcdefghijklmnopqrstuvwxyz"

я бы получил

opqrstuvwxyz""abcdefghijklmn

Или что-то похожее. Однако если я нажму Enter, команда все равно сработает. Я думаю, что это как-то связано с моей переменной PS1, но я не знаю, что с ней не так. Вот она:

export PS1='\e[1;35m[\u:\w]\$\e[0;35m '

решение1

Это кажется несколько связанным:

Страница man Bash рекомендует обернуть tputвывод в \[ \]. Это помогает Bash игнорировать непечатаемые символы, чтобы правильно рассчитать размер приглашения.

Источник.

" tputВыход" в вашем случае выглядит так: \e[1;35m, \e[0;35m(есть два отдельных фрагмента для переноса). Их можно записать как \033[1;35mи \033[0;35mтакже. В общем случае вам нужно переносить любую непечатаемую последовательность.

Я изменил ваш PS1:

export PS1='\[\e[1;35m\][\u:\w]\$\[\e[0;35m\] '

и, похоже, у меня все работает без проблем.

Связанный контент