Come far dire alla barra superiore del mio terminale quale comando è in esecuzione?


13

Spesso eseguo comandi in parallelo che impiegano molto tempo per terminare e talvolta perdo traccia di ciò che sta funzionando da quando hanno praticamente emesso lo stesso tipo di informazioni sullo schermo.

Conosci un modo per scoprire quale comando è in esecuzione in quale terminale?


1
Non sono sicuro che funzioni ancora, ma questo potrebbe aiutare anche oltre all'ottima risposta di @dessert. → askubuntu.com/questions/774532/…
Videonauth

Risposte:


12

Tratto da Bash - Aggiorna il titolo del terminale eseguendo un secondo comando · U&L e leggermente modificato:

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

Questo (ab) utilizza il DEBUGsegnale come trigger per aggiornare il titolo con l'ultima voce della cronologia, ovvero l'ultimo comando eseguito, tramite una sequenza di controllo XTerm . Aggiungi la linea alla tua ~/.bashrcper abilitare la funzione in ogni nuova finestra del terminale.

Per stampare l'output di altri comandi accanto al titolo, dire la directory corrente pwdseguita da ":" e il comando attualmente in esecuzione, si consiglia di utilizzare printfcome segue:

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

Alcuni emulatori di terminale ti consentono di specificare un titolo dinamico e ti danno anche il nome del comando come opzione in modo da non dover nemmeno giocherellare: ho cercato e l'ho trovato nelle yakuakeimpostazioni del profilo.


2

Il titolo della finestra del terminale può essere modificato cambiando il valore della variabile $PS1- la stringa del prompt primario. [1] [2] . Potremmo combinare questa soluzione con l'idea di usare il comando dalla risposta del Dessert . history


Approccio 1: aggiorna $PS1automaticamente il valore di . (Aggiornare)

Aggiungi le seguenti righe in fondo al file ~/.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

Quindi source ~/.bashrco basta aprire un nuovo terminale e utilizzare la funzione in questo modo:

  • Eseguire rtitleper iniziare a modificare automaticamente il titolo della finestra del terminale, in base all'ultimo comando eseguito.
  • Eseguire di rtitlenuovo per tornare al comportamento predefinito.

Approccio 2: aggiornare il valore di $PS1manualmente. (Risposta iniziale)

Aggiungi le seguenti righe in fondo al file ~/.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

Quindi source ~/.bashrco basta aprire un nuovo terminale e utilizzare la funzione in questo modo:

  • set-title <something>cambierà il titolo della finestra del terminale in <something>.
  • set-title senza argomento cambierà il titolo della finestra del terminale al comando precedente.

Riferimenti ed esempi:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.