2010-03-09 7 views
7

J'ai récemment ajouté ces lignes à mon fichier ~/.bashrc pour afficher la branche actuelle si je suis dans un dossier de travail git, et cela fonctionne bien pour cette. Cependant, ce que j'ai perdu, c'est que le nom du dossier actuel était affiché dans l'onglet pour le terminal que j'ai ouvert, et maintenant ce n'est pas le cas: il dit toujours 'Terminal'. Est-ce que je peux récupérer ça et garder les trucs de git? Voici les lignes en question - c'est le second problème, car le fait de commenter la deuxième ligne résout le problème.Paramètres Bash PS1 - comment récupérer le dossier en cours en tant que titre du terminal

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

J'ai regardé des explications sur les options pour PS1 mais je ne vois rien sur le titre de la fenêtre du terminal là-dedans. Quelqu'un peut-il conseiller? merci, max

EDIT

Je manipule en fait déjà PS1 afin d'avoir un terminal avec le format

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

, chaque partie dans une couleur différente, mais je n'ai jamais vu les docs avant, alors merci pour le lien à cela. Mon réglage actuel PS1 est

\[\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\]$ 

On peut supposer que je peux faire quelque chose comme

export "<something> $PS1" 

pour définir mon nom de l'onglet terminal sans perdre mes paramètres existants. J'ai été piquer avec cela et ne pas réussi à le faire.

EDIT - vous l'avez compris à l'aide de certaines des réponses ci-dessous - merci à tous! J'enveloppai dans un script shell

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

on l'appelle « renametab » donc je peux maintenant appeler avec par exemple

source renametab mytabname 

« source » est nécessaire pour exporter les changements dans l'enveloppe actuelle: si Je fais juste renametab mytabname l'exportation va juste dans un sous-shell qui est tué lorsque le script se termine.

Merci encore à tous pour votre aide!

Répondre

4

C'est ce que j'ai par défaut sur mon Ubuntu concernant le titre du terminal:

PS1='\[\e]0;\[email protected]\h: \w\a\]' 

Prepend votre PS1 avec celui-ci et il devrait être bien

+0

Parfait, merci Romuald! –

+0

C'est ce que j'ai fait, pour éviter de perdre mes paramètres PS1 actuels: 'foo' devrait être remplacé par la valeur réelle. 'exporter PS1 =" $ PS1 "'\ [\ e] 0; foo \ a \]'' –

5

Vous pouvez essayer:

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

Mais il serait utile de savoir ce que PS1 est réglé à plus tôt dans ~/.bashrc ou /etc/bash.bashrc.

+0

Cela fonctionne magnifiquement - J'aime la référence à la variable existante! Avec mon .bashrc, j'ai dû supprimer le '\ h: \ w' pour supprimer les entrées redondantes:' PS1 = "$ PS1" '$ (__ git_ps1 "\ [\ e [32m \] [% s] \ [\ e [0m \] ") $ '' – sage

0

Une autre façon de faire est d'utiliser PROMPT_COMMAND et laisser PS1 juste être l'invite. Par exemple:

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

0

J'utilise ceci:

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

qui se traduit par un titre de la fenêtre comme ceci:

/home/tkirk - [email protected] 
0

Pour la truelly sans défense (comme moi-même) Voici ma Bash RC qui inclut le nom de la branche git dans l'invite et définit le titre de la fenêtre.Veuillez noter que cette propriété utilise le PROMPT_COMMAND pour __git_ps1. il prend 2 arguments Le premier argument est la chaîne avant le nom de la branche, le second argument est la chaîne après le son nom de ch.

# 
# ~/.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\[email protected]\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[\[email protected]\t]$>' 
2

Si vous êtes chanceux, votre terminal est compatible xterm, et vous pouvez utiliser les séquences ANSI pour définir le titre de votre terminal. Au lieu de vous donner la séquence, je vais vous diriger vers le documentation. Maintenant, vous pouvez colorier votre invite. La séquence dont vous avez besoin est décrite comme xterm title hack qui est ce que c'est.

Vous pouvez également utiliser les séquences de contrôle dans l'invite pour aider à définir PS1. Ceux-ci peuvent être trouvés dans la page de manuel BASH sous PROMPTING.

Et voici ce que j'ai dans mon .bashrc:

PS1="\e]0;BASH: \[email protected]\h\aBASH \v: \[email protected]\h:\w\n\$ " 
  • \e]0;BASH: \[email protected]\h\a - Définir le titre de la fenêtre
    • \e] - Envoyer caractère ESC suivi par tranche fermée gauche. C'est le début d'une séquence de commande ANSI.
    • 0; - Zéro suivi d'un point-virgule. La chaîne suivante définit le titre
    • BASH: \[email protected]\h\ - My Window Titre
      • \u - Nom d'utilisateur
      • @ - Le signe @
      • \h - Nom d'hôte
    • \a - Le BEL (Cnrl- G) qui termine mon titre
  • BASH \v: \[email protected]\h:\w\n\$ - Définit mon invite
    • BASH \v: - La chaîne BASH suivie de la version. Mon shell par défaut est Ksh, alors quand je suis en utilisant le shell BASH, je veux voir le mot BASH dans mon invite
    • \u - Le nom d'utilisateur
    • \h - Le nom d'hôte
    • \w - Le courant répertoire de travail (basé à la maison)
    • \n - Nouvelle ligne - Mon invite est deux lignes. De cette façon, les répertoires longs n'occupent pas l'espace de la ligne de commande.
    • \$ - Signe dollar ou # si vous avez les privilèges root.

Jouez et amusez-vous. Essayez les différentes séquences d'échappement. Ajouter de la couleur Incorporer les trucs GIT. Explorer. Rappelez-vous, c'est juste un ordinateur. Le pire que vous puissiez faire, c'est que tout le système s'effondre et supprime tout votre précieux travail, qu'il perde votre emploi et devienne un paria désespéré dont les seuls moyens de subsistance seront de demander aux clients s'ils veulent des frites avec ça. Sauf si vous travaillez dans une banque. Ensuite, vous pouvez également faire tomber toute l'économie mondiale.

+0

Je ne savais pas que je pourrais détruire ma vie si minutieusement via la var PS1! ;-) Merci pour le lien vers les docs, et pour ne pas dire 'rtfm noob lol'. S'il vous plaît voir le modifier dans mon OP - merci! –

Questions connexes