Terminalimin üst çubuğunun hangi komutun çalıştığını söylemesi nasıl yapılır?


13

Sık sık bitirmek için uzun zaman alan komutları paralel olarak çalıştırırım ve bazen temelde ekranda aynı tür bilgiler çıktıkları için nerede çalıştığını takip ederim.

Hangi terminalde hangi komutun çalıştığını öğrenmenin herhangi bir yolunu biliyor musunuz?


1
Bu hala işe yarayıp yaramadığından emin değilim, ama bu da tatlıın mükemmel cevabının yanı sıra yardımcı olabilir. → askubuntu.com/questions/774532/…
Videonauth

Yanıtlar:


12

Bash'ten Alındı - İkinci bir komut · U&L çalıştırarak ve biraz değiştirerek terminal başlığını güncelleyin :

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

Bu (ab), DEBUGsinyali bir XTerm Kontrol Dizisi aracılığıyla geçmişinizden son girişle, yani yürüttüğünüz son komutla güncellemek için tetikleyici olarak kullanır . ~/.bashrcÖzelliğin her yeni terminal penceresinde etkinleştirilmesi için satırı ekleyin .

Başlığın yanında başka bir komut çıktısı yazdırmak için, geçerli dizinin pwdardından ":" ve o anda çalışmakta olan komutu söyleyin, printfaşağıdaki gibi kullanmanızı öneririm :

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

Bazı terminal emülatörleri, dinamik bir başlık belirlemenize ve hatta komut adını bir seçenek olarak vermenize izin verir, böylece etrafta dolaşmanıza bile gerek kalmaz - araştırdım ve yakuakeprofil ayarlarında buldum .


2

Terminal penceresi başlığı, değişken bilgi $PS1- birincil bilgi istemi dizesi değiştirilerek değiştirilebilir . [1] [2] . Bu çözümü Dessert'un cevabındaki komutu kullanma fikriyle birleştirebiliriz . history


Yaklaşım 1: $PS1Otomatik olarak değerini güncelleyin . (Güncelleme)

Dosyanın altına aşağıdaki satırları ekleyin ~/.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

Ardından source ~/.bashrcveya yeni bir terminal açın ve işlevi şu şekilde kullanın:

  • rtitleSon yürütülen komuta göre terminal penceresi başlığını otomatik olarak değiştirmeye başlamak için yürütün .
  • Yürütme rtitlevarsayılan davranışa geri dönmek için bir kez daha.

Yaklaşım 2: $PS1Manuel değerini güncelleyin . (İlk cevap)

Dosyanın altına aşağıdaki satırları ekleyin ~/.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

Ardından source ~/.bashrcveya yeni bir terminal açın ve işlevi şu şekilde kullanın:

  • set-title <something>terminal penceresi başlığını olarak değiştirecektir <something>.
  • set-title bağımsız değişken olmadan terminal penceresi başlığını önceki komuta değiştirir.

Kaynaklar ve örnekler:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.