Comment faire en sorte que la barre supérieure de mon terminal indique quelle commande est en cours d'exécution?

13

J'exécute souvent des commandes en parallèle qui prennent beaucoup de temps à terminer et parfois je perds la trace de ce qui s'exécute, car elles génèrent essentiellement le même type d'informations à l'écran.

Connaissez-vous un moyen de savoir quelle commande s'exécute dans quel terminal?

Luca Minciullo
la source
1
Je ne sais pas si cela fonctionne toujours, mais cela pourrait aussi aider en plus de l'excellente réponse de @dessert. → askubuntu.com/questions/774532/…
Videonauth

Réponses:

12

Tiré de Bash - Mettre à jour le titre du terminal en exécutant une deuxième commande · U&L et légèrement modifié:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

Cette (ab) utilise le DEBUGsignal comme déclencheur pour mettre à jour le titre avec la dernière entrée de votre historique, c'est-à-dire la dernière commande que vous avez exécutée, via une séquence de contrôle XTerm . Ajoutez la ligne à votre ~/.bashrcpour activer la fonctionnalité dans chaque nouvelle fenêtre de terminal.

Pour imprimer une autre sortie de commande à côté dans le titre, dites le répertoire courant pwdsuivi de ":" et de la commande en cours d'exécution, je recommande d'utiliser printfcomme suit:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

Certains émulateurs de terminal vous permettent de spécifier un titre dynamique et même de vous donner le nom de la commande en option afin que vous n'ayez même pas besoin de jouer - j'ai cherché et trouvé dans yakuakeles paramètres de profil de.

dessert
la source
2

Le titre de la fenêtre du terminal peut être modifié en modifiant la valeur de la variable $PS1- la chaîne d'invite principale. [1] [2] . Nous pourrions combiner cette solution avec l'idée d'utiliser la commande de la réponse du Dessert . history


Approche 1: mettez à jour la valeur de $PS1automatiquement. (Mise à jour)

Ajoutez les lignes suivantes au bas du fichier ~/.bashrc:

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

Ensuite, source ~/.bashrcou ouvrez simplement un nouveau terminal et utilisez la fonction de cette manière:

  • Exécutez rtitlepour commencer à modifier automatiquement le titre de la fenêtre du terminal, en fonction de la dernière commande exécutée.
  • Exécutez rtitleà nouveau pour revenir au comportement par défaut.

Approche 2: mettez à jour la valeur de $PS1manuellement. (Réponse initiale)

Ajoutez les lignes suivantes au bas du fichier ~/.bashrc:

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

Ensuite, source ~/.bashrcou ouvrez simplement un nouveau terminal et utilisez la fonction de cette manière:

  • set-title <something>changera le titre de la fenêtre du terminal en <something>.
  • set-title sans argument changera le titre de la fenêtre du terminal à la commande précédente.

Références et exemples:

pa4080
la source