ฉันจะหาข้อมูลอ้างอิงที่สมบูรณ์สำหรับตัวแปร $ PS1 ได้จากที่ใด


20

ตัวแปร PS1 เริ่มต้นบนเครื่องของฉัน (Kubuntu 13.10) คือ:

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

ฉันกำลังมองหาข้อมูลอ้างอิงสำหรับการทำงานของตัวแปร $ PS1 ที่อย่างน้อยช่วยให้ฉันเข้าใจตัวแปร PS1 ข้างต้น


@ RaduRădeanuฉันได้ย้ายออกไปเป็นคำตอบแยกต่างหากตอนนี้
Mark Raymond

ขณะที่ทราบโดยทั่วไปแล้วคุณสามารถเล่นรอบกับเรื่องนี้โดยการตั้งค่าของในขั้วเช่นPS1 PS1="How r u, \u?"การเปลี่ยนแปลงจะคงอยู่จนกว่าคุณจะปิดเครื่อง
djvg

เกี่ยวข้อง: askubuntu.com/a/984073/301745
wjandrea

คำตอบ:


24

อ้างอิง

จนถึงตอนนี้ยังไม่ได้มีการอ้างอิงเดียวสำหรับทุกสิ่งที่สามารถไปใน Bash prompt - แต่เป็นคุณสมบัติที่มีการพัฒนามานานหลายทศวรรษและอาจแตกต่างจาก distro ไป distro บางทีอาจจะมากเกินไปที่จะถาม ฉันพยายามสรุปสิ่งที่ฉันพบว่ามีประโยชน์มากที่สุดที่นี่

วิธีการนี้เป็นวิธีที่สมบูรณ์แบบที่สุด บางส่วนที่มีประโยชน์มากขึ้น:

  • ส่วนที่ 2.4และ2.5อธิบายพื้นฐานของการตั้งค่า PS1 รวมถึงตัวอักษร (ที่พิมพ์ได้) สำหรับการหลบหนี
  • ส่วนที่ 3.4อธิบายสาเหตุ\[และ\]ความจำเป็น
  • ส่วนที่ 6อธิบายลำดับการหลบหลีกหลัก (ไม่สามารถพิมพ์ได้) ทั้งหมดที่คุณอาจต้องการใช้รวมถึงการตั้งค่าสีของพรอมต์และชื่อของหน้าต่าง xterm

คู่มือนี้จะอธิบายถึงวิธีการ${}ทำงานในทุบตีทั่วไปและนี้สอบถามอูบุนตูdebian_chrootอธิบายอีกเล็กน้อยเกี่ยวกับวิธีการทำงานที่มี

ระหว่างนั้นฉันคิดว่าทุกตัวละครในตัวแปร Ubuntu PS1 ที่เป็นค่าเริ่มต้นนั้นได้อธิบาย

คำอธิบายของพรอมต์ Ubuntu

พรอมต์มีสามส่วน:

  • \[\e]0;\u@\h: \w\a\] ตั้งค่าแถบหัวเรื่องของหน้าต่าง xterm:

    • \[ เริ่มส่วนของอักขระที่ไม่สามารถพิมพ์ได้
    • \e]0; เป็นลำดับ escape สำหรับ 'set xterm title' (ฉันเชื่อว่าตัวเลขที่ไม่ใช่ 0 จะกำหนดคุณสมบัติ xterm อื่น ๆ แม้ว่าฉันจะไม่ได้ทดสอบสิ่งนี้)
    • \u@\h: \wชื่อเพื่อการใช้งาน (ดูด้านล่างสำหรับ\u, \hและ\w)
    • \a ทำเครื่องหมายจุดสิ้นสุดของชื่อเรื่อง
    • \] ทำเครื่องหมายจุดสิ้นสุดของอักขระที่ไม่สามารถพิมพ์ได้
  • ${debian_chroot:+($debian_chroot)}ขยายเป็นค่า $ debian_chroot ในวงเล็บหากตั้งค่า $ debian_chroot ดูคำถามนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ $ debian_chroot
  • \u@\h:\w\$ เป็นพรอมต์ของตัวเอง:

    • \u ขยายเป็นชื่อผู้ใช้ปัจจุบัน
    • \h ขยายเป็นชื่อโฮสต์ปัจจุบัน
    • \w ขยายไปยังไดเร็กทอรีการทำงานปัจจุบัน
    • \$ขยายเป็น#รูทและ$สำหรับผู้ใช้อื่น ๆ ทั้งหมด

6

ตามด้วยคู่มือการทุบตีอ้างอิง , PS1คือ:

สตริงพรอมต์หลัก \s-\v\$ค่าเริ่มต้นคือ โปรดดูการควบคุมพรอมต์สำหรับรายการลำดับการยกเว้นทั้งหมดที่ขยายก่อนที่PS1จะแสดงขึ้น

บุคคลอ้างอิงที่ดีบางคนสามารถ:


คู่มือทุบตีอธิบายลำดับหนี PS1 อย่างเต็มที่: gnu.org/software/bash/manual/bashref.html#Printing-a-Prompt
glenn jackman

@Radu - ขอบคุณนั่นทำให้ฉันมากไปกว่าที่ฉันเคยเป็นมาก่อน ดูเหมือนว่ายังมีข้อมูลเล็กน้อยเกี่ยวกับสิ่งที่สามารถเข้าไปข้างใน\[และ\]แม้ว่า - คุณมีการอ้างอิงใด ๆ
Mark Raymond

@ MarkRaymond มันอธิบายไว้ในสองลิงก์ที่ฉันให้คุณ (การพิมพ์พรอมต์และPS1 ให้อธิบายสำหรับ Linux / Unix ): \[- เริ่มลำดับของอักขระที่ไม่พิมพ์ซึ่งสามารถใช้เพื่อฝังลำดับการควบคุมเทอร์มินัลลงในพร้อมท์ \]- จบลำดับของอักขระที่ไม่ได้พิมพ์ เพียงใช้เวลาของคุณและอ่านอย่างระมัดระวัง;)
Radu Rădeanu

ใช่ฉันอ่านแล้ว - ฉันกำลังค้นหาการอ้างอิงถึงสิ่งที่ตัวละครที่ไม่ใช่การพิมพ์ทำ ขออภัยถ้าฉันไม่ชัดเจน!
Mark Raymond

@MarkRaymond ตัวอักษรไม่พิมพ์แจ้ง
Radu Rădeanu

5

ดูเหมือนว่าss64.comจะมีการอ้างอิงที่ดีที่สุดที่ฉันได้พบ

มันอธิบายตัวแปรต่อไปนี้:

\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.

\[ ... \]กำหนดชุดของอักขระที่ไม่ใช่การพิมพ์ พวกเขาจะต้องติดตามตำแหน่งเคอร์เซอร์อย่างถูกต้อง

\eในพรอมต์ของคุณเริ่มต้นลำดับหนี เพิ่มเติมเกี่ยวกับที่นี่ (หมายเหตุ "Esc" ในหน้านั้นเป็น\eลำดับ)

  • หมายเหตุ: ฉันไม่เคยชอบ escape sequences มาก่อน ใช้tputเพื่อรับรหัสยกเว้นสำหรับคุณ

${debian_chroot:+($debian_chroot)}คือการขยายพารามิเตอร์ ดูที่นี่

  • มันเขียน($debian_chroot)ถ้า$debian_chrootมีการตั้งค่าเป็นอย่างอื่นไม่มีอะไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.