วิธีปรับแต่งพรอมต์คำสั่งใน bash

ในเชลล์ bash พรอมต์คำสั่งคือข้อความที่แสดงเมื่อคุณได้รับพร้อมท์ให้ป้อนข้อมูล ในระบบส่วนใหญ่จะมีลักษณะดังนี้:

ในพรอมต์คุณสามารถมีข้อมูลก่อนที่คุณจะเรียกใช้คำสั่งใด ๆ ตัวอย่างเช่นพรอมต์ด้านบนแสดงให้คุณเห็นดังต่อไปนี้

  1. คุณเป็นใคร (ผู้ใช้ชื่อ ผู้ใช้ )
  2. คุณอยู่ที่ไหน (คอมพิวเตอร์ชื่อ myhost )
  3. ไดเรกทอรีทำงานของคุณคืออะไร ( ~ ซึ่งเป็นตัวย่อสำหรับไดเรกทอรีบ้านของคุณ)

บางทีที่สำคัญที่สุดคือเครื่องหมายดอลลาร์ (" $ ") ซึ่งเป็นอักขระพิเศษที่ระบุว่าคุณเข้าสู่ระบบในฐานะผู้ใช้ที่ไม่ใช่รูท หากคุณเข้าสู่ระบบในฐานะรูทตัวละครนี้จะเป็นเครื่องหมายปอนด์ (" # ") แทน

สตริงที่แทนพรอมต์จะถูกเก็บไว้ในตัวแปรสภาพแวดล้อมพิเศษชื่อ PS1 สำหรับพรอมต์ข้างต้นค่าของมันจะเป็นดังนี้

 "\ [ป้องกันอีเมล] \ h: \ W \ $" 

สตริงนี้มีสี่อักขระพิเศษ: \ u, \ h, \ W, \ $ เหล่านี้คือลำดับอักขระที่ใช้ Escape ซึ่งจะถูกแทนที่ด้วยค่าจริงทุกครั้งที่มีการแจ้งเตือน

ตัวละครพิเศษ

ลำดับอักขระพิเศษที่แสดงในตารางด้านล่างสามารถใช้ในพรอมต์ของ bash shell

ลำดับตัวละครแปลเป็น
\ aอักขระ "สัญญาณเตือน" ทริกเกอร์เสียงบี๊บหรือแฟลชหน้าจอ
\ dวันที่ปัจจุบันซึ่งแสดงในรูปแบบ วันธรรมดาเดือนวันที่ (เช่น วันพุธ 13 พฤษภาคม )
\ D { รูปแบบ }วันที่และเวลาปัจจุบันที่แสดงตามรูปแบบที่ตีความโดย strftime หากไม่ระบุรูปแบบ \ D {} จะแสดงเวลา AM / PM 12 ชั่วโมงปัจจุบัน (เช่น 07:23:01 PM )
\ Eอักขระเลี่ยง (ASCII 27)
\ e [ หมายเลข mหมายถึงการเริ่มต้นของลำดับที่จะแสดงสีโดยที่ number คือตัวเลขหรือคู่ของตัวเลขซึ่งระบุสีและสไตล์ที่จะใช้ ดูรายการสีและคู่ของตัวเลขด้านล่าง
\ E [เมตรแสดงถึงจุดสิ้นสุดของลำดับที่จะแสดงเป็นสี
\ ชั่วโมงชื่อโฮสต์ของเครื่องสูงสุด " . " ตัวอย่างเช่นหากชื่อโฮสต์ของระบบคือ myhost.mydomain, \ h แสดง myhost
\ Hชื่อโฮสต์แบบเต็มของเครื่อง
\ Jจำนวนงานที่จัดการโดยเชลล์
\ ลิตรตัวระบุอุปกรณ์ปลายทางของเชลล์โดยทั่วไปจะเป็นตัวเลขหลักเดียว
\ nขึ้นบรรทัดใหม่
\ rการคืนสินค้า
\ sชื่อของเชลล์ (ชื่อฐานของกระบวนการที่เริ่มต้นเซสชัน bash ปัจจุบัน)
\ tเวลาปัจจุบันแสดงเป็นรูปแบบ HH: MM: SS 24 ชั่วโมง (เช่น 19:23:01 )
\ Tเวลาปัจจุบันแสดงในรูปแบบ HH: MM: SS แบบ 12 ชั่วโมง (เช่น 07:23:01 )
\ @เวลาปัจจุบันแสดงในรูปแบบ HH: MM: SS AM / PM 12 ชั่วโมง (เช่น 07:23:01 PM )
\ aเวลาปัจจุบันในรูปแบบ HH: 24 ชั่วโมง MM (เช่น 19:23 )
\ยูชื่อผู้ใช้ของผู้ใช้ปัจจุบัน
\ วีหมายเลขเวอร์ชัน Bash (เช่น 4.3 )
\ Vรุ่น Bash และหมายเลขโปรแกรมแก้ไข (เช่น 4.3.30 )
w \ไดเรกทอรีปัจจุบัน โฮมไดเร็กตอรี่ของผู้ใช้นั้นย่อมาจาก tilde (" ~ ") ตัวอย่างเช่น / usr / bin, ~ หรือ ~ / Documents
\ Wชื่อฐานของไดเรกทอรีทำงานปัจจุบัน (เช่น bin, ~ หรือ เอกสาร )
\!หมายเลขประวัติของคำสั่งปัจจุบัน
\ #หมายเลขคำสั่งของคำสั่งปัจจุบัน (หมายเลขคำสั่งเหมือนกับหมายเลขประวัติ แต่จะรีเซ็ตเป็นศูนย์เมื่อคุณเริ่มเซสชัน bash ใหม่)
\ nnnอักขระ ASCII ที่มีค่าฐานแปดคือ nnn
\\แบ็กสแลช
\ [ทำเครื่องหมายจุดเริ่มต้นของลำดับของอักขระที่ไม่ได้พิมพ์เช่นรหัสควบคุมเทอร์มินัล
\]ทำเครื่องหมายจุดสิ้นสุดของลำดับที่ไม่พิมพ์
\ $พิมพ์ # ถ้า UID เป็นศูนย์ (superuser) หรือ $ ถ้ามากกว่าศูนย์ (คนอื่น)

การเปลี่ยนพรอมต์สำหรับเซสชันปัจจุบัน

คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PS1 ได้ เช่นเดียวกับตัวแปรอื่น ๆ ใน bash โดยมีรูปแบบข้อความสั่ง NAME = VALUE ดังนั้นในการตั้งค่าพรอมต์มาตรฐานคุณสามารถพิมพ์ดังต่อไปนี้ที่บรรทัดคำสั่ง

 PS1 = "\ [ป้องกันอีเมล] \ h: \ W \ $" 

…และข้อความแจ้งของคุณจะเปลี่ยนทันที สังเกตุช่องว่างสุดท้ายหลังเครื่องหมายดอลลาร์ในสตริงสำหรับช่องว่างเพิ่มเติมหลังจากพรอมต์ของคุณซึ่งทำให้ง่ายต่อการแยกความแตกต่างคำสั่งที่คุณพิมพ์จากพรอมต์ พื้นที่เพิ่มเติมไม่จำเป็น แต่ขอแนะนำ

โปรดสังเกตว่าในคำสั่งไม่มีช่องว่างระหว่าง PS1, = และสตริง

การเปลี่ยนพรอมต์สำหรับเซสชันในอนาคตทั้งหมด

หากคุณต้องการเปลี่ยนพรอมต์สำหรับเซสชันใหม่ทุกครั้งคุณต้องแก้ไขไฟล์ bash startup ของคุณ ทุกครั้งที่คุณเริ่มต้นเซสชันเทอร์มินัลไฟล์ต่อไปนี้หากมีอยู่จะถูกอ่านและเรียกใช้งานเป็นสคริปต์:

/ etc / profile ~ / .bash_profile ~ / .bash_login

~ / .profile

ไฟล์แรก / etc / profile เป็นสคริปต์เริ่มต้นสำหรับผู้ใช้ในระบบที่เริ่มเซสชัน bash ในการเปลี่ยนพรอมต์สำหรับผู้ใช้ทุกคนคุณต้องแก้ไขไฟล์นี้และคุณต้องมีสิทธิ์ผู้ใช้ขั้นสูงในการทำเช่นนั้น

 sudo vi / etc / profile 

ตัวอย่างเช่นคำสั่งดังกล่าวจะแจ้งให้คุณใส่รหัสผ่านของคุณและหากคุณอยู่ในรายการ sudoers ให้เปิดไฟล์ universal bash startup เป็น superuser โดยใช้เครื่องมือแก้ไข vi

อีกสามไฟล์จะถูกค้นหาตามลำดับที่แสดงไว้ด้านบนและดำเนินการหลังจาก / etc / profile ไฟล์ทั้งสามนี้อยู่ในโฮมไดเร็กตอรี่ของคุณ, ดังนั้นไฟล์เหล่านั้นจะถูกเรียกใช้งานสำหรับคุณเท่านั้น พวกเขาอาจกำหนด PS1 ในที่เดียวมากกว่าหนึ่งแห่งดังนั้นคุณควรอ่านไฟล์อย่างละเอียดเพื่อดูว่าพวกเขามีการกำหนดค่าในระบบของคุณอย่างไร ตัวอย่างเช่นระบบจำนวนมากจะใช้ค่า PS1 ที่แตกต่างกันขึ้นอยู่กับว่าเทอร์มินัลของคุณรองรับสีหรือไม่

ไฟล์ใดไฟล์หนึ่งในสามไฟล์นี้อาจมีอยู่และใช้สำหรับเซสชัน bash ของคุณ แต่หากมีมากกว่าหนึ่งไฟล์ไฟล์เหล่านั้นจะถูกดำเนินการตามลำดับที่แสดงไว้

หากคุณไม่ต้องการลบหรือเปลี่ยนบรรทัดในไฟล์เริ่มต้นคุณสามารถเพิ่มคำสั่ง PS1 = ใหม่ไปยังจุดสิ้นสุดของไฟล์ใดไฟล์หนึ่งเพื่อใช้พรอมต์แบบกำหนดเอง

เพิ่มสีให้กับพรอมต์ของคุณ

หากคุณใช้เทอร์มินัลที่รองรับสี (และคุณอาจเป็น) คุณสามารถเพิ่มสีให้กับพรอมต์ของคุณ เพิ่มสีโดยใช้ลำดับอักขระพิเศษที่เป็นไปตามรูปแบบนี้:

\ e [ หมายเลข mเริ่มต้นส่วนที่มีสี ค่าตัวเลขคือหมายเลขพิเศษหรือคู่ของตัวเลขซึ่งระบุสี
\ E [เมตรหมายถึงจุดจบของส่วนสี รีเซ็ตเป็นสีเริ่มต้น

ตัวอย่างเช่นสตริงแจ้ง:

 PS1 = "\ e [1; 35m นี่คือสีม่วงสดใส \ e [0; 35m ... และนี่คือสีม่วงเข้ม \ e [m" 

จะสร้างพรอมต์ที่มีลักษณะดังนี้:

นี่คือรายการสีที่คุณสามารถใช้ได้และหมายเลขที่ระบุ:

จำนวน (s)สี / รูปแบบจำนวน (s)สี / รูปแบบ
0; 30สีดำ1; 30เทาเข้ม
0; 31สีแดง1; 31แดงสด
0; 32สีเขียว1; 32สีเขียวสดใส
0; 33สีน้ำตาล1; 33สีเหลือง
0; 34สีน้ำเงิน1; 34สีฟ้าสดใส
0; 35สีม่วง1; 35สีม่วงสดใส
0; 36สีฟ้า1; 36ฟ้าสดใส
0; 37สีเทา1; 37ขาว
4; 30ขีดเส้นใต้สีดำ40พื้นหลัง: สีเทาเข้ม
4; 31สีแดงขีดเส้นใต้41พื้นหลัง: สีแดง
4; 32เขียวขีดเส้นใต้42พื้นหลัง: สีเขียว
4; 33สีน้ำตาลขีดเส้นใต้43พื้นหลัง: สีเหลือง
4; 34สีน้ำเงินขีดเส้นใต้44พื้นหลัง: สีน้ำเงิน
4; 35สีม่วงขีดเส้นใต้45พื้นหลัง: สีม่วง
4; 36สีฟ้าขีดเส้นใต้46พื้นหลัง: สีฟ้า
4; 37สีเทาขีดเส้นใต้47พื้นหลัง: สีเทา

นี่คือตัวอย่างและสิ่งที่พวกเขาดูเหมือน:

 PS1 = "\ e [0; 31mRed \ e [0; 32mGreen \ e [0; 33mBrown \ e [0; 34mBlue \ e [0; 35mPurple \ e [0; 36mCray \ e [m" 

 PS1 = "ขีดเส้นใต้: \ e [4; 31mRed \ e [4; 32mGreen \ e [4; 33mBrown \ e [4; 34mBlue \ e [4; 35mPurple \ e [4; 36mCyan \ e [4; 37mGray \ e [4; m" 

 PS1 = "\ e [44m \ e [1; 35mBright purple บนพื้นหลังสีฟ้า \ e [m"