web-dev-qa-db-fra.com

Comment changer le titre de l'onglet du terminal en cours en utilisant uniquement la ligne de commande

Aucune des réponses actuellement affichées ne répond/ne répond à la question.

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é:

  • Une fois que le titre est changé, je ne veux pas que cela change si je change de répertoire, etc.
  • Je ne veux pas le titre identique sur tous les onglets. Je veux seulement définir le titre de l'onglet dans lequel je lance la commande
  • Je veux que plusieurs onglets aient chacun un titre différent

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

34
Bohemian

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"'

Instruction

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.

18
Kelly DC

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).

10
muru

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>

7
WillC

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"
5
John1024

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.

enter image description here

Ou de l'interface graphique:

Allez dans Menu: Terminal -> Définir le titre -> Entrez un nouveau titre puis enregistrez.


Maintenant, pourquoi votre commande ne fonctionne pas?

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
3
Maythux

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"

3
Sjoerd

Instructions

  1. Ajoutez settitle () à votre .bashrc.
  2. source ~/.bashrc
  3. settitle Banana

settitle ()

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}"
}
2
earthmeLon

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;" &
1
Der Bosst

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:

tab 1

tab 2

Et comme le montre l'image précédente, j'ai plusieurs onglets avec un nom unique.

16.04.1-Ubuntu

1
JRichardsz

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.

0
Mike Amy