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


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

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


12
2017-12-04 11:40


asal


Tidak yakin apakah ini masih berfungsi, tetapi ini mungkin juga membantu selain jawaban yang luar biasa dari @dessert. → askubuntu.com/questions/774532/… - Videonauth


Jawaban:


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 DEBUG sinyal sebagai pemicu untuk memperbarui judul dengan entri terakhir dari riwayat Anda, yaitu perintah terakhir yang Anda jalankan, melalui XTerm Control Sequence. Tambahkan baris ke Anda ~/.bashrc agar fitur diaktifkan di setiap jendela terminal baru.

Untuk mencetak keluaran perintah lain di samping judul, ucapkan direktori saat ini dengan pwd diikuti dengan ":" dan perintah yang sedang berjalan, saya sarankan untuk menggunakan printf sebagai 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.


12
2017-12-04 13:18





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


Pendekatan 1: Perbarui nilai $PS1 secara 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 ~/.bashrc atau hanya membuka terminal baru dan menggunakan fungsi dengan cara ini:

  • Menjalankan rtitle untuk mulai mengubah judul jendela terminal secara otomatis, berdasarkan perintah yang terakhir dijalankan.
  • Menjalankan rtitle sekali lagi untuk kembali ke perilaku default.

Pendekatan 2: Perbarui nilai $PS1 secara 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 ~/.bashrc atau hanya membuka terminal baru dan menggunakan 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:


2
2017-12-04 17:21