Jak sprawić, aby górny pasek mojego terminala powiedział, jakie polecenie jest uruchomione?

13

Często uruchamiam równolegle polecenia, których zakończenie zajmuje dużo czasu, a czasem tracę orientację, co jest uruchomione, ponieważ generują one zasadniczo ten sam rodzaj informacji na ekranie.

Czy znasz jakiś sposób, aby dowiedzieć się, jakie polecenie działa w danym terminalu?

Luca Minciullo
źródło
1
Nie jestem pewien, czy to nadal działa, ale może to również pomóc oprócz doskonałej odpowiedzi @dessert. → askubuntu.com/questions/774532/…
Videonauth,

Odpowiedzi:

12

Zaczerpnięte z Bash - Zaktualizuj tytuł terminala, uruchamiając drugie polecenie · U&L i nieznacznie zmieniono:

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

To (ab) używa DEBUGsygnału jako wyzwalacza do aktualizacji tytułu ostatnim wpisem z twojej historii, tj. Ostatnim wykonanym poleceniem, za pomocą Sekwencji Kontrolnej XTerm . Dodaj linię do swojej, ~/.bashrcaby włączyć tę funkcję w każdym nowym oknie terminala.

Aby wydrukować inne dane wyjściowe polecenia obok tytułu, powiedz bieżący katalog, pwdpo którym następuje „:” i aktualnie uruchomione polecenie, zalecam użycie printfw następujący sposób:

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

Niektóre emulatory terminali pozwalają określić dynamiczny tytuł, a nawet podać nazwę polecenia jako opcję, abyś nawet nie musiał się bawić - szukałem i znalazłem to w yakuakeustawieniach profilu.

deser
źródło
2

Tytuł okna terminala można zmienić, zmieniając wartość zmiennej $PS1- główny ciąg zachęty. [1] [2] . Możemy połączyć to rozwiązanie z pomysłem użycia polecenia z odpowiedzi na deser . history


Podejście 1: Zaktualizuj wartość $PS1automatycznie. (Aktualizacja)

Dodaj następujące wiersze na dole pliku ~/.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

Następnie source ~/.bashrclub po prostu otwórz nowy terminal i użyj funkcji w ten sposób:

  • Wykonaj, rtitleaby automatycznie zmienić tytuł okna terminala na podstawie ostatniego wykonanego polecenia.
  • Wykonaj rtitleponownie, aby przywrócić domyślne zachowanie.

Podejście 2: zaktualizuj wartość $PS1ręcznie. (Wstępna odpowiedź)

Dodaj następujące wiersze na dole pliku ~/.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

Następnie source ~/.bashrclub po prostu otwórz nowy terminal i użyj funkcji w ten sposób:

  • set-title <something>zmieni tytuł okna terminala na <something>.
  • set-title bez argumentu zmieni tytuł okna terminala na poprzednie polecenie.

Referencje i przykłady:

pa4080
źródło