Di mana saya dapat menemukan referensi lengkap untuk variabel $ PS1?

20

Variabel PS1 default pada mesin saya (Kubuntu 13.10) adalah ini:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Saya sedang mencari referensi untuk cara kerja variabel $ PS1 yang, minimal, memungkinkan saya untuk memahami variabel PS1 di atas.

Mark Raymond
sumber
@ RaduRădeanu Saya sudah memindahkannya ke jawaban yang terpisah sekarang.
Mark Raymond
Sebagai catatan umum, Anda dapat bermain-main dengan ini dengan menetapkan nilai PS1di terminal, misalnya PS1="How r u, \u?". Perubahan hanya akan berlangsung sampai Anda menutup terminal.
djvg
Terkait: askubuntu.com/a/984073/301745
wjandrea

Jawaban:

24

Referensi

Sejauh ini, belum ada referensi tunggal untuk semua yang bisa masuk dalam Bash prompt - tetapi karena ini adalah fitur yang telah berkembang selama beberapa dekade dan mungkin bervariasi dari distro ke distro, mungkin itu terlalu banyak untuk ditanyakan. Saya sudah mencoba meringkas apa yang menurut saya paling berguna di sini.

Cara ini adalah yang paling lengkap, tetapi sangat panjang dan bertele-tele. Beberapa bagian yang lebih berguna:

  • Bagian 2.4 dan 2.5 menjelaskan dasar-dasar pengaturan PS1, termasuk karakter pelarian (yang dapat dicetak).
  • Bagian 3.4 menjelaskan mengapa \[dan \]perlu.
  • Bagian 6 menjelaskan semua urutan pelarian utama (tidak dapat dicetak) yang mungkin ingin Anda gunakan, termasuk mengatur warna prompt dan judul jendela xterm.

Panduan ini menjelaskan cara ${}kerja Bash secara umum, dan pertanyaan Tanya pada Ubuntu ini menjelaskan lebih banyak tentang cara kerjanya debian_chroot.

Di antara itu, saya pikir setiap karakter dalam variabel default Ubuntu PS1 dijelaskan.

Penjelasan prompt Ubuntu

Ada tiga bagian ke prompt:

  • \[\e]0;\u@\h: \w\a\] menyetel bilah judul jendela xterm:

    • \[ memulai bagian karakter yang tidak dapat dicetak
    • \e]0; adalah urutan pelarian untuk 'set xterm title' (Saya percaya angka selain 0 akan mengatur properti xterm lainnya, meskipun saya belum menguji ini)
    • \u@\h: \wjudul untuk digunakan (lihat di bawah untuk \u, \hdan \w)
    • \a menandai akhir dari judul
    • \] menandai akhir dari karakter yang tidak dapat dicetak
  • ${debian_chroot:+($debian_chroot)}meluas ke nilai $ debian_chroot dalam tanda kurung jika $ debian_chroot disetel. Lihat pertanyaan ini untuk informasi lebih lanjut tentang $ debian_chroot.
  • \u@\h:\w\$ adalah prompt itu sendiri:

    • \u meluas ke nama pengguna saat ini
    • \h meluas ke nama host saat ini
    • \w memperluas ke direktori kerja saat ini
    • \$meluas ke #untuk root dan $untuk semua pengguna lain
Mark Raymond
sumber
6

Menurut dengan Bash Reference Manual , PS1adalah:

String prompt utama. Nilai standarnya adalah \s-\v\$. Lihat Mengontrol Prompt , untuk daftar lengkap urutan pelarian yang diperluas sebelum PS1ditampilkan.

Beberapa referensi lain yang baik dapat:

Radu Rădeanu
sumber
Manual bash menggambarkan urutan pelepasan PS1 sepenuhnya: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
glenn jackman
@ Radu - Terima kasih, itu membuat saya lebih jauh dari yang saya dapatkan sebelumnya. Tampaknya masih ada sedikit informasi tentang apa yang bisa masuk ke dalam \[dan \], meskipun - apakah Anda punya referensi untuk itu?
Mark Raymond
@MarkRaymond Ini dijelaskan dalam dua tautan yang saya berikan kepada Anda ( prompt Prompt dan PS1 dijelaskan untuk Linux / Unix ): \[- mulai urutan karakter non-cetak, yang dapat digunakan untuk menanamkan urutan kontrol terminal ke prompt; \]- akhiri urutan karakter yang tidak dicetak.
Luangkan
Ya, saya membacanya - saya sedang mencari referensi tentang apa yang dilakukan karakter yang tidak dicetak itu. Maaf jika saya tidak jelas!
Mark Raymond
@MarkRaymond Non-Printing Character in Prompts .
Radu Rădeanu
5

ss64.com tampaknya memiliki referensi terbaik yang saya temukan.

Ini menjelaskan variabel-variabel berikut:

\d   The date, in "Weekday Month Date" format (e.g., "Tue May 26"). 

\h   The hostname, up to the first . (e.g. deckard) 
\H   The hostname. (e.g. deckard.SS64.com)

\j   The number of jobs currently managed by the shell. 

\l   The basename of the shell's terminal device name. 

\s   The name of the shell, the basename of $0 (the portion following 
    the final slash). 

\t   The time, in 24-hour HH:MM:SS format. 
\T   The time, in 12-hour HH:MM:SS format. 
\@   The time, in 12-hour am/pm format. 

\u   The username of the current user. 

\v   The version of Bash (e.g., 2.00) 

\V   The release of Bash, version + patchlevel (e.g., 2.00.0) 

\w   The current working directory. 
\W   The basename of $PWD. 

\!   The history number of this command. 
\#   The command number of this command. 

\$   If you are not root, inserts a "$"; if you are root, you get a "#"  (root uid = 0) 

\nnn   The character whose ASCII code is the octal value nnn. 

\n   A newline. 
\r   A carriage return. 
\e   An escape character. 
\a   A bell character.
\\   A backslash. 

\[   Begin a sequence of non-printing characters. (like color escape sequences). This
     allows bash to calculate word wrapping correctly.

\]   End a sequence of non-printing characters.

The \[ ... \]mendefinisikan serangkaian karakter non-cetak. Mereka diminta untuk melacak posisi kursor dengan benar.

The \edi prompt Anda memulai urutan pelarian. Lebih banyak tentang yang ada di sini (catatan "Esc" pada halaman itu adalah \eurutannya).

  • Catatan: Saya tidak pernah benar-benar menyukai urutan pelarian. Gunakan tputuntuk mendapatkan kode pelarian untuk Anda.

${debian_chroot:+($debian_chroot)}adalah ekspansi parameter. Lihat di sini

  • Itu menulis ($debian_chroot)jika $debian_chroottidak diatur apa-apa.
kiri
sumber