Прокрутите вниз в списке, об/мин перечислены наверху, архивы TAR внизу, пример Linux - Универсальные 2.6 (x86, 64-разрядные), Сжатый Архив TAR в нижней части списка
Добавьте
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$'
как длятся строку в Вашем ~/.bashrc и входят в систему снова или просто работают
source ~/.bashrc
Я думаю, что OP просит установить заголовок окна, в котором работает ваш эмулятор терминала. Меня смущают ссылки на PS1, так как я могу добиться этого, просто запустив это...
printf '\e]2;%s\a' "My Title"
По крайней мере, это работает с mintty 2.7 (+ Cygwin 2.8). (Возможно, за годы, прошедшие с момента первоначальной публикации вопроса, что-то изменилось.)
Если заголовки вообще не обновляются после входа на какой-либо SSH-сервер, попробуйте установить пакет OpenSSH из cygwin.
Для меня cygwin использовал некоторую внутреннюю версию OpenSSH для Windows 10 Pro, которая не пропускала escape-символы заголовка обратно через стек SSH.
Публикую это, чтобы кто-то не тратил на это час
У вас две проблемы:
echo $PS1
должно быть echo "$PS1"
. Это приводит к тому, что подсказка теряет пробел в конце; т. е. становится $
, а не $
. В некоторых случаях это может вызвать другие проблемы. Bash использует \[
… \]
для разграничения управляющих последовательностей; то есть символы, которые не отображаются на экране как часть подсказки. Это включает в себя escape-последовательность для установки заголовка окна, но также и escape-последовательности для изменения цвета в видимой подсказке (). Ваш скрипт делает
s/ ^ \\\\\[.+ \\\\\] //g
(с добавлением пробелов для ясности ). На первый взгляд, похоже, что это попытка удалитьвсе\[
… \]
последовательности. (На самом деле, есть две причины, по которым этого не происходит. )Основная проблема в том, что .+
соответствует максимально длинная строка из любых символов. Это означает, что он удаляет все с начала первой последовательности \[
… \]
до конца последнего \[
… \]
— другими словами, все до последнего изменения цвета.
Мы хотим удалить только управляющую последовательность, чтобы установить заголовок окна. Обычно мы меняем .+
(, где.
соответствует любому символу ). в строку символов, отличных от ]
. Но это осложняется тем, что управляющая последовательность для установки заголовка окнасодержитa ]
, поэтому нам нужно сопоставить второй ]
:
s/^\\\\\[[^]]+][^]]+\\\\\]//g
Сейчас я покажу это в контексте…
`
… `
является устаревшим синтаксисом. Вместо этого рекомендуется использовать $(
… )
. В некоторых сообщениях предполагается, что они функционально взаимозаменяемы. Они не; применяются другие правила кавычек / экранирования. К счастью,в данном случае это работает в нашу пользу. Когда мы переключаемся на $(
… )
, мы можем изменить команду sed
, чтобы использовать меньше обратной косой черты. function
не рекомендуется. См. ниже предпочтительный синтаксис. Итак, сложив воедино все вышеперечисленное, получаем вот что:
wtitle() {
if [ "$TERM" == "xterm" ] ; then
# Remove the old title string in the PS1, if one is already set.
PS1=$(echo "$PS1" | sed -r 's/^\\\[[^]]+][^]]+\\\]//g')
export PS1="\[\033]0;$1 - \u@\h:\w\007\]$PS1"
else
echo "You are not working in xterm. I cannot set the title."
fi
}
Возможно, даже это не идеально. Это зависит от существующего значения PS1
наличие escape-последовательности заголовка окна в первую очередь.