Réponses:
Cela dépend de votre coquille.
Cet article affiche plusieurs méthodes.
Personnellement, j'utilise zsh, qui a une fonction pratique precmd () qui est exécutée avant chaque invite.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Bien que les autres questions énumèrent les méthodes bash, elles ont pour alias cd. Bash fournit une méthode inhérente qui enchaîne simplement l'invite.
frapper
bash fournit une variable PROMPT_COMMAND qui contient une commande à exécuter avant l'invite. Cet exemple (inséré dans ~ / .bashrc) définit le titre sur "username @ hostname: directory":
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
où \ 033 est le code de caractère pour ESC et \ 007 pour BEL. Notez que la citation est importante ici: les variables sont développées dans "...", et non développées dans '...'. Donc, PROMPT_COMMAND est défini sur une valeur non développée, mais les variables à l'intérieur de "..." sont développées lorsque PROMPT_COMMAND est utilisé.
Cependant, PWD génère le chemin de répertoire complet. Si nous voulons utiliser le raccourci '~', nous devons incorporer la chaîne d'échappement dans l'invite, ce qui nous permet de tirer parti des extensions d'invites suivantes fournies par le shell:
\u expands to $USERNAME
\h expands to hostname up to first '.'
\w expands to directory, replacing $HOME with '~'
\[...\] embeds a sequence of non-printing characters
Ainsi, ce qui suit produit une invite de "bash $" et un titre xterm de "nomutilisateur @ nomhôte: répertoire" ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Notez l'utilisation de [...], qui indique à bash d'ignorer les caractères de contrôle non imprimables lors du calcul de la largeur de l'invite. Sinon, les commandes d'édition de lignes sont confuses lors du placement du curseur.
~/.profile
fichier (ou équivalent) sur la machine distante.
Copier / coller dans le fichier ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Cela définira le titre de l'onglet du terminal actuel sur le nom du dossier dans lequel vous vous trouvez (PAS le chemin d'accès complet).
Alors ...
Developer/Applications/Utilities/Bluetooth/
devient =>Bluetooth
A partir de Mac OS X Lion 10.7, Terminal dispose d'une séquence d'échappement explicite pour la configuration du répertoire de travail, que Terminal affiche à l'aide de l'icône "proxy" de la fenêtre standard. Cela vous permet de cliquer sur cette touche pour voir le chemin, de la révéler dans le Finder ou de la faire glisser comme n'importe quel autre dossier. En outre, Terminal peut utiliser cette option pour créer un autre terminal dans le même répertoire et pour restaurer le répertoire de travail lors de la fermeture / du redémarrage du terminal (lorsque la reprise est activée). Il permet également la restauration de répertoires pour les groupes de fenêtres.
Il s'agit de la même séquence d'échappement de commande du système d'exploitation (OSC) que pour les titres de fenêtre et d'onglet, mais avec le premier paramètre défini sur 7. La valeur doit être une URL "fichier:", qui active les caractères spéciaux codés en pourcentage afin de pouvoir la gérer. tous les chemins valides. Vous devez également inclure le nom d’hôte afin que Terminal puisse déterminer s’il s’agit d’un répertoire local; Terminal évitera de l’utiliser comme répertoire de travail actuel s’il provient d’un hôte différent.
Sur une note connexe, Terminal prend également en charge la définition du "fichier représenté" à l'aide de la séquence d'échappement OSC avec un paramètre de 6. Si défini, l'icône du proxy affichera ceci au lieu du répertoire de travail. Par exemple, j'ai emacs et moins configuré pour refléter le fichier / tampon actuellement affiché dans l'icône de proxy. Cela permet à ces programmes basés sur les terminaux d'être mieux intégrés au système d'exploitation environnant.
Les comportements de répertoire de travail sont activés par défaut pour bash (le shell par défaut sous Mac OS X). Voir / etc / bashrc pour le code correspondant.
Il convient également de mentionner que Lion Terminal prend désormais en charge la définition du titre de l’onglet indépendamment du titre de la fenêtre à l’aide de la séquence d’échappement OSC.
update_terminal_cwd
fonction définira l'icône du proxy dans le répertoire de travail actuel. Par défaut $PROMPT_COMMAND
est update_terminal_cwd
.
Outre la recommandation d'utiliser la séquence d'échappement Commande du système d'exploitation spécifique au terminal Apple: ESC ] Ps ; Pt BEL
où Ps
est 7
et Pt
est une file:
URL; Cela vaut la peine d'ajouter que dans Mac OS X 10.11 (et probablement depuis 10.7), il existe un fichier /etc/bashrc_Apple_Terminal
(non modifiable sous 10.11) qui définit ce qui convient update_terminal_cwd()
comme (sans les commentaires):
update_terminal_cwd ()
{
local url_path='';
{
local i ch hexch LC_CTYPE=C LC_ALL=;
for ((i = 0; i < ${#PWD}; ++i))
do
ch="${PWD:i:1}";
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch";
else
printf -v hexch "%02X" "'$ch";
url_path+="%${hexch: -2:2}";
fi;
done
};
printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}
Vous pouvez également l'utiliser sur vos boîtes distantes, au cas où vous envisagiez de le faire, puis vous effleurer l'encodage correct de l'URL du fichier dans bash.
Et si vous modifiez PROMPT_COMMAND
vous-même .bash_profile
ou si .bashrc
vous oubliez d’appeler cela. Dans le même fichier, ils montrent un exemple de chaînage un peu meilleur avec:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Personnellement, dans mon .bash_profile
je voulais ajouter l'invite git donc j'ai fait ceci:
local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-prompt.sh
do
if [[ -f "$f" ]]; then
. "$f"
fi
done
get_sha() {
git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
export GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWCOLORHINTS=1
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWUPSTREAM="auto git"
export PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi
Les solutions Bash impliquant PS1 et PROMPT_COMMAND échouent si le répertoire contient des caractères Unicode (au moins sur Snow Leopard). La meilleure solution que je pouvais trouver était de faire l'équivalent de
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
Malheureusement, cela ne fonctionne pas directement. J'ai donc défini une fonction shell pour effectuer l' tr
appel:
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
Cela fonctionne bien pour les accents latins, qui seront en Unicode NFD (les accents disparaîtront mais le caractère latin sous-jacent restera).
Malheureusement, cela échouera complètement pour des choses comme le chinois.
En supposant que vous utilisiez le terminal MAC par défaut, vous pouvez utiliser le suivant dans le fichier .profile, car "set_prompt" peut à lui seul vous envoyer au dossier racine lorsque vous ouvrez un nouvel onglet:
set_prompt () {
BASE_PATH="${PWD##*/}"
echo -ne "\033]0;$BASE_PATH\007"
}
set_my_tab () {
update_terminal_cwd
set_prompt
}
PROMPT_COMMAND=set_my_tab
Entrez ceci dans votre fichier ~ / .profile ou équivalent:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
La première ligne contient deux caractères spéciaux qui ne peuvent pas être copiés / collés, mais vous pouvez télécharger le texte à partir d’ici: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
utiliser printf
, ce qui vous permet d'exprimer ces caractères (ESC et BEL / Control-G) avec des séquences d'échappement:printf '\e]0;$@\a"