Conformément à ma question initiale, aucun paramètre PS1
ni Prompt_COMMAND
n’a eu d’effet.
En utilisant uniquement une commande à l'invite de commande, comment modifier le titre de l'onglet du terminal actuel?
De nombreux posts suggèrent ceci:
echo -en "\033]0;New terminal title\a"
mais ça ne fait rien.
Aucune des réponses actuelles ne fonctionne (certaines ne répondent pas à la question), alors pour plus de clarté:
De plus, la variable Prompt_COMMAND
n'est pas définie dans mes sessions de terminal. Si je le mets:
Prompt_COMMAND='echo -en "\033]0;New terminal title\a"'
ça n'a aucun effet.
Quelle est la commande correcte?
Pour votre information, le résultat de uname -a
est:
Linux d136172 3.13.0-45-generic # 74-Ubuntu SMP mar 13 jan 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
de @Maythux, celui-ci fonctionne pour mon besoin de ne pas tenir compte de mon répertoire courant d'invite automatique sur le terminal.
Prompt_COMMAND='echo -en "\033]0;New terminal title\a"'
Changez la chaîne sur "Nouveau nom du terminal" avec $("pwd")
:
Prompt_COMMAND='echo -en "\033]0; $("pwd") \a"'
Cela changera automatiquement le titre même si vous ajoutez un nouvel onglet.
J'utilise le paramètre ci-dessous qui a l'air mieux, vous pouvez également jouer à la programmation bash et définir la vôtre.
Prompt_COMMAND='echo -en "\033]0;$(whoami)@$(hostname)|$(pwd|cut -d "/" -f 4-100)\a"'
Ajoutez ce paramètre à votre ~/.bashrc
.
Lorsque PS1
définit le titre, toute tentative de définition du titre à l'aide d'une commande ou de Prompt_COMMAND
échouera, étant donné que l'invite est imprimée après chacun d'eux. Pour cette raison, je préfère conserver une simple invite lors du test des titres (PS1=$; unset Prompt_COMMAND
).
De https://askubuntu.com/a/774543/455406 , une solution spécifique à Bash consiste à créer une fonction personnalisée (voir par exemple ce how-to ) comme
# function to set terminal title
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*\a\]"
PS1=${ORIG}${TITLE}
}
ce qui vous permet d'appeler set-title <name you want to set it to>
Il est très probable que Prompt_COMMAND
soit défini et il écrase votre choix de titre à chaque affichage de l'invite. Essayez de le désactiver puis en émettant votre commande de titre:
Prompt_COMMAND=
echo -en "\033]0;New terminal title\a"
Vous pouvez le faire, que ce soit dans l'interface de ligne de commande ou l'interface graphique (je suppose que vous utilisez gnome-terminal, vous pouvez le faire pour d'autres simplement remplacer le nom de l'application):
Dans la CLI, exécutez la commande:
gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name"
Remarque: le nouveau nom est appliqué à toutes les occurrences d'onglets de terminal et non au seul onglet en cours.
Ou de l'interface graphique:
Allez dans Menu: Terminal -> Définir le titre -> Entrez un nouveau titre puis enregistrez.
Vous devez ajouter cette ligne au fichier .bashrc
et non directement à votre terminal.
gedit .bashrc
Ajouter cette ligne:
Prompt_COMMAND='echo -en "\033]0;New terminal title\a"'
Puis enregistrez et sourcez le fichier bashrc.
source .bashrc
Ce fil est peut-être un peu vieux, mais voici une solution qui fonctionne pour moi:
https://blog.programster.org/ubuntu-16-04-set-terminal-title
Modifiez simplement votre fichier $ HOME/.bashrc et ajoutez la fonction suivante:
set-title () {
ORIG = $ PS1
TITLE = "\ e] 2; $ @\a"
PS1 = $ {ORIG} $ {TITLE}
}Maintenant, chaque fois que vous voulez définir le titre de votre terminal, entrez quelque chose comme:
set-title "mon super titre de terminal"
.bashrc
.source ~/.bashrc
settitle Banana
function settitle()
{
if [ $# -eq 0 ]
then
eval set -- "\\u@\\h: \\w"
fi
case $TERM in
xterm*) local title="\[\033]0;$@\007\]";;
*) local title=''
esac
local Prompt=$(echo "$PS1" | sed -e 's/\\\[\\033\]0;.*\\007\\\]//')
PS1="${title}${Prompt}"
}
Utiliser bash, wmctrl, xprop, ps
1) Pour un programme actif de longue durée:
Par exemple, démarrez un programme (ranger) s'exécutant sur un terminal, à partir du bureau, modifiez le titre une fois, après un certain délai (5 secondes) au démarrage du programme:
startranger.sh:
#!/bin/bash
/usr/local/bin/changetitle.sh 5 ranger
/usr/local/bin/ranger
changetitle.sh:
#!/bin/bash
delay="$1"
shift
wintitle="$*"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "sleep $delay; wmctrl -i -r $winid -N \"$wintitle\"" &
2) Si vous exécutez une session de terminal sans exécuter de programme actif, mettez à jour le titre sur une boucle se terminant à la fermeture de votre terminal:
changetitleloop.sh 1 maintenance for server
l'exécution de ce qui précède mettra à jour le titre du terminal actuel toutes les 1 secondes, même si vous cd
(pouvez le changer plusieurs fois), en utilisant:
changetitleloop.sh
#!/bin/bash
interval="$1"
shift
wintitle="$*"
termpid="$(ps -p $$ -o ppid= | sed -e 's/^[ \t]*//')"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "ss=\$$; echo \$ss > /tmp/term-$termpid.pid; while x=\$(wmctrl -i -r $winid -N \"$wintitle\"); ret=\$?; sleep $interval; owner=\$(cat /tmp/term-$termpid.pid); [ \$ret -eq 0 ] && [ \$ss -eq \$owner ]; do continue; done;" &
Basé sur @muru answer
PS1 définit le titre. Toute tentative de définition du titre à l'aide d'une commande ou de Prompt_COMMAND échouera, l'invite s'imprimant après chacun d'eux.
Cela a fonctionné dans mon S. élémentaire:
PS1='\u:\W\$ '
Prompt_COMMAND='echo -en "\033]0;New terminal title\a"'
J'exécute ceci dans chaque nouvel onglet:
Et comme le montre l'image précédente, j'ai plusieurs onglets avec un nom unique.
16.04.1-Ubuntu
Une solution peut être d'installer la dernière version de tmux .
tmux permet de définir des titres par volet, activés par la commande suivante:
tmux set -g pane-border-status top
Ils peuvent également être affichés en bas.
Les titres sont ensuite définis via une séquence d'échappement:
printf '\033]2│;%s\033\\' 'My Pane Title'
Chaque volet peut avoir son propre titre et tous les titres sont affichés en permanence.
Les volets tmux ressembleront alors à ceci:
──0 "My Pane Title"──────┬──1 "Another Pane"───────
> │>
Cela a été testé sur linux mint 18.2 (comme Ubuntu) avec tmux 2.8. L'installation était à partir d'une archive.
Si vous voulez être plus productif dans votre terminal, tmux offre également de nombreuses autres fonctionnalités.