GNU/Linux >> Belajar Linux >  >> Linux

Bash Prompt dengan Kode Keluar Terakhir

Saat Anda mulai membatasi PS1 yang kompleks, Anda dapat mempertimbangkan untuk menggunakan PROMPT_COMMAND .
Dengan ini, Anda menyetelnya ke sebuah fungsi, dan akan dijalankan setelah setiap perintah untuk menghasilkan prompt.

Anda dapat mencoba yang berikut di ~/.bashrc Anda

PROMPT_COMMAND=__prompt_command # Func to gen PS1 after CMDs

__prompt_command() {
    local EXIT="$?"             # This needs to be first
    PS1=""

    local RCol='\[\e[0m\]'

    local Red='\[\e[0;31m\]'
    local Gre='\[\e[0;32m\]'
    local BYel='\[\e[1;33m\]'
    local BBlu='\[\e[1;34m\]'
    local Pur='\[\e[0;35m\]'

    if [ $EXIT != 0 ]; then
        PS1+="${Red}\u${RCol}"      # Add red if exit code non 0
    else
        PS1+="${Gre}\u${RCol}"
    fi

    PS1+="${RCol}@${BBlu}\h ${Pur}\W${BYel}$ ${RCol}"
}

Ini harus melakukan apa yang Anda inginkan. Lihat sub file bashrc saya jika Anda ingin melihat semua hal yang saya lakukan dengan __prompt_command saya fungsi.


Jika Anda tidak ingin menggunakan perintah prompt, ada dua hal yang perlu Anda pertimbangkan:

  1. mendapatkan nilai $? sebelum yang lainnya, jika tidak maka akan diganti
  2. melepaskan semua $ di PS1 (sehingga tidak dievaluasi saat Anda menetapkannya)

Contoh kerja menggunakan variabel

PS1="\$(VALU="\$?" ; echo \$VALU ; date ; if [ \$VALU == 0 ]; then echo zero; else echo nonzero; fi) " 

Contoh kerja tanpa variabel

Di sini jika perlu menjadi hal pertama, sebelum perintah apa pun yang akan menimpa $? .

PS1="\$(if [ \$? == 0 ]; then echo zero; else echo nonzero; fi) "

Perhatikan bagaimana \$() di-escape jadi tidak langsung dieksekusi tapi setiap PS1 digunakan. Juga semua penggunaan \$?


Saya ingin mempertahankan warna default Debian, mencetak kode persisnya, dan hanya mencetaknya jika gagal:

# Show exit status on failure.
PROMPT_COMMAND=__prompt_command

__prompt_command() {
    local curr_exit="$?"

    local BRed='\[\e[0;91m\]'
    local RCol='\[\e[0m\]'

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

    if [ "$curr_exit" != 0 ]; then
        PS1="[${BRed}$curr_exit${RCol}]$PS1"
    fi
}

Linux
  1. Kode keluar baris perintah bash didemistifikasi

  2. Bash -c Dengan Parameter Posisi?

  3. Apa itu Kode Keluar Bash di Linux

  1. Alias ​​​​dengan variabel di bash

  2. Bash:tunggu dengan batas waktu

  3. Mengapa keluar kode 141 dengan grep -q?

  1. Aplikasi C++ diakhiri dengan 143 kode keluar - apa artinya?

  2. Membulatkan Bilangan dengan bc di Bash

  3. jika dengan regex dalam kode bash