Bagaimana cara membuat bar bagian atas terminal saya mengatakan perintah apa yang sedang berjalan?

13

Saya sering menjalankan perintah secara paralel yang membutuhkan waktu lama untuk diselesaikan dan kadang-kadang saya kehilangan jejak apa yang sedang berjalan di mana karena pada dasarnya mereka menghasilkan informasi yang sama di layar.

Apakah Anda tahu cara untuk mengetahui perintah apa yang berjalan di terminal apa?

Luca Minciullo
sumber
1
Tidak yakin apakah ini masih berfungsi, tetapi ini mungkin membantu juga selain jawaban yang sangat bagus dari @dessert. → askubuntu.com/questions/774532/…
Videonauth

Jawaban:

12

Diambil dari Bash - Perbarui judul terminal dengan menjalankan perintah kedua · U&L dan sedikit berubah:

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

Ini (ab) menggunakan DEBUGsinyal sebagai pemicu untuk memperbarui judul dengan entri terakhir dari riwayat Anda, yaitu perintah terakhir yang Anda jalankan, melalui Urutan Kontrol XTerm . Tambahkan baris ke Anda ~/.bashrcuntuk mengaktifkan fitur di setiap jendela terminal baru.

Untuk mencetak output perintah lain di samping judul, ucapkan direktori saat ini dengan pwddiikuti oleh ":" dan perintah yang sedang berjalan, saya sarankan menggunakan printfsebagai berikut:

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

Beberapa emulator terminal memungkinkan Anda untuk menentukan judul yang dinamis dan bahkan memberi Anda nama perintah sebagai opsi sehingga Anda bahkan tidak perlu bermain-main - saya mencari dan menemukannya di yakuakepengaturan profil.

pencuci mulut
sumber
2

Judul jendela terminal dapat diubah dengan mengubah nilai variabel $PS1- string prompt utama. [1] [2] . Kita bisa menggabungkan solusi ini dengan ide menggunakan perintah dari jawaban Dessert . history


Pendekatan 1: Perbarui nilai $PS1secara otomatis. (Memperbarui)

Tambahkan baris berikut ke bagian bawah 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

Kemudian source ~/.bashrcatau cukup buka terminal baru dan gunakan fungsi dengan cara ini:

  • Jalankan rtitleuntuk mulai mengubah judul jendela terminal secara otomatis, berdasarkan pada perintah yang dieksekusi terakhir.
  • Jalankan rtitlesekali lagi untuk kembali ke perilaku default.

Pendekatan 2: Perbarui nilai $PS1secara manual. (Jawaban awal)

Tambahkan baris berikut ke bagian bawah 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

Kemudian source ~/.bashrcatau cukup buka terminal baru dan gunakan fungsi dengan cara ini:

  • set-title <something>akan mengubah judul jendela terminal menjadi <something>.
  • set-title tanpa argumen akan mengubah judul jendela terminal ke perintah sebelumnya.

Referensi dan contoh:

pa4080
sumber