Настройки Bash PS1 - как вернуть текущую папку в качестве заголовка терминала - PullRequest
7 голосов
/ 09 марта 2010

Я недавно добавил эти строки в свой файл ~ / .bashrc, чтобы показать текущую ветку, если я нахожусь в рабочей папке git, и она прекрасно работает для этого. Однако, что я потерял, так это то, что имя текущей папки раньше отображалось на вкладке для терминала, который у меня открыт, а теперь это не так: он всегда просто говорит «Терминал». Могу ли я получить это обратно и все еще сохранить вещи? Вот строки, о которых идет речь, - это вторая проблема, поскольку закомментирование только второй строки решает проблему.

source /etc/bash_completion.d/git
PS1='\h:\w$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ '

Я искал объяснения опций для PS1, но там не вижу ничего о заголовке окна терминала. Кто-нибудь может посоветовать? спасибо, макс

EDIT

Я на самом деле уже манипулирую PS1, чтобы получить терминал с форматом

<rvm version and gemset> <computer name> <current folder> <git branch>

, с каждой частью в другом цвете, но я никогда раньше не видел документы, так что спасибо за ссылку на это. Моя текущая настройка PS1

\[\033[0;31m\]$(__my_rvm_ruby_version)\[\033[0;33m\]\h\[\033[0;37m\]:\[\033[1;33m\]\W\[\033[1;32m\]$(__git_branch)\[\033[1;32m\]$(__git_dirty) \[\033[0;37m\]$

Предположительно, я могу сделать что-то вроде

export "<something> $PS1"

, чтобы установить имя вкладки моего терминала без потери моих существующих настроек. Я возился с этим, хотя и не смог сделать это.

РЕДАКТИРОВАТЬ - понял это с помощью некоторых из ответов ниже - спасибо всем! Я завернул его в сценарий оболочки

#!/usr/bin/env bash
#renames the current terminal tab via the PS1 env var
source ~/.bashrc
export PS1="$PS1""\[\e]0;$1 \a\]"

он называется "renametab", так что теперь я могу вызвать его, например,

source renametab mytabname

«источник» необходим для экспорта изменений в текущую оболочку: если я просто сделаю renametab mytabname, экспорт просто переходит в подоболочку, которая завершается при завершении сценария.

Еще раз спасибо всем, за помощь!

Ответы [ 6 ]

5 голосов
/ 09 марта 2010

Вы можете попробовать:

PS1="$PS1"'\h:\w$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ '

Но было бы полезно узнать, какой PS1 устанавливается ранее в ~/.bashrc или /etc/bash.bashrc.

4 голосов
/ 09 марта 2010

Это то, что у меня есть по умолчанию в моей Ubuntu относительно заголовка терминала:

PS1='\[\e]0;\u@\h: \w\a\]'

Добавьте ваш PS1 к этому, и все должно быть в порядке

2 голосов
/ 30 октября 2013

Если вам повезет, ваш терминал совместим с Xterm, и вы можете использовать последовательности ANSI для установки названия вашего терминала.

Вместо того, чтобы дать вам последовательность, я укажу вам на документацию . Теперь вы можете раскрасить вашу подсказку. Необходимая последовательность описывается как xterm title hack , что это такое.

Вы также можете использовать управляющие последовательности в подсказке, чтобы помочь установить PS1. Их можно найти на справочной странице BASH в разделе PROMPTING .

А вот что у меня есть в .bashrc:

PS1="\e]0;BASH: \u@\h\aBASH \v: \u@\h:\w\n\$ "
  • \e]0;BASH: \u@\h\a - Установить заголовок окна
    • \e] - отправить символ ESC, за которым следует левая скобка. Это начало последовательности команд ANSI.
    • 0; - Ноль, за которым следует точка с запятой. Следующая строка устанавливает заголовок
    • BASH: \u@\h\ - заголовок моего окна
      • \u - Имя пользователя
      • @ - Знак @
      • \h - имя хоста
    • \a - BEL (Cnrl-G), который заканчивает мой титул
  • BASH \v: \u@\h:\w\n\$ - Устанавливает мою подсказку
    • BASH \v: - Строка BASH , за которой следует версия. Моя оболочка по умолчанию Ksh, поэтому, когда я использую оболочку BASH, я хочу видеть слово BASH в моем приглашении
    • \u - Имя пользователя
    • \h - имя хоста
    • \w - Текущий рабочий каталог (на основе HOME)
    • \n - Новая строка - Моя подсказка состоит из двух строк. Таким образом, длинные каталоги не занимают место в командной строке.
    • \$ - знак доллара или #, если у вас есть права root.

Играйте и веселитесь. Попробуйте разные escape-последовательности. Добавьте цвет. Вставить материал GIT. Проводить исследования.

Помните, это просто компьютер. Самое худшее, что вы можете сделать, - это привести к краху всей системы и удалить всю вашу ценную работу, потерять работу и стать безнадежным изгоем, чей единственный источник дохода будет спрашивать клиентов, хотят ли они картофель фри с этим. Если только вы не работаете в банке. Тогда вы также можете разрушить всю мировую экономику.

1 голос
/ 30 октября 2013

Для действительно беспомощных (как и я). Вот мой Bash RC, который включает имя ветки git в приглашение и устанавливает заголовок окна. Обратите внимание, что для __git_ps1 используется PROMPT_COMMAND, который устанавливает PS1 внутри. При использовании __git_ps1 таким способом требуется 2 аргумента. Первый аргумент - это строка перед именем ветви, второй аргумент - это строка после имени ветви.

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

source ~/git/contrib/completion/git-prompt.sh

alias ls='ls --color=auto'
alias cd..='cd ..'

c_reset='\[\e[0m\]'
c_prompt='\[\e[1;31m\]'
c_path='\[\e[0;33m\]'

if [ -f ~/git/contrib/completion/git-prompt.sh ]; then
. ~/git/contrib/completion/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWCOLORHINTS=true
GIT_PS1_UNTRACKEDFILES=true
# Below, The section "\[\e]0;\w\a\]" sets the window title
PROMPT_COMMAND="__git_ps1 '${c_path}\w${c_reset}' '\n\u@\t${c_prompt}-->${c_reset}\[\e]0;\w\a\]' "
fi

#PS1 is set by the __git_ps1 script above, so comment out below
#PS1='\w\n[\u@\t]$>'
0 голосов
/ 11 марта 2010

Я использую это:

PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/~} - ${USER}@${HOSTNAME}\007"'

, в результате чего заголовок окна выглядит так:

/home/tkirk - tkirk@hostname
0 голосов
/ 09 марта 2010

Другой способ сделать это - использовать PROMPT_COMMAND и позволить PS1 просто быть подсказкой. Например:

PROMPT_COMMAND = 'echo -ne "\ 033] 0; $ {USER} @ $ {HOSTNAME %%. *}: $ {PWD / # $ HOME / ~}"; echo -ne "\ 007" '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...