ในบทความก่อนหน้านี้ เราได้พูดถึงตัวแปรสภาพแวดล้อม Linux PS[1-4] และ PROMPT_COMMAND หากใช้อย่างมีประสิทธิภาพ PS1 สามารถให้ข้อมูลที่มีค่าได้จากพรอมต์คำสั่ง
ใน Tomb Raider Angelina Jolie มีอุปกรณ์และอาวุธทั้งหมดอยู่ที่ปลายนิ้วของเธอเพื่อไขปริศนาอย่างมีสไตล์ แม้ว่าอุปกรณ์และสไตล์ของ Angelina Jolie จะเข้ากันได้ยาก แต่อย่างน้อยขอให้เราพยายามทำให้ Linux รุ่นเก่าทำงานได้ดีและมีสไตล์โดยใช้ตัวอย่าง 10 ตัวอย่างที่ให้ไว้ในบทความนี้
1. แสดงชื่อผู้ใช้ ชื่อโฮสต์ และไดเร็กทอรีการทำงานปัจจุบันในพรอมต์
PS1 ในตัวอย่างนี้แสดงข้อมูลสามข้อต่อไปนี้ในข้อความแจ้ง:
- \u – ชื่อผู้ใช้
- \h – ชื่อโฮสต์
- \w – เส้นทางแบบเต็มของไดเร็กทอรีการทำงานปัจจุบัน
-bash-3.2$ export PS1="\u@\h \w> "
ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
2. แสดงเวลาปัจจุบันในข้อความแจ้ง
ในตัวแปรสภาพแวดล้อม PS1 คุณสามารถรันคำสั่ง Linux ใดๆ ได้โดยตรง โดยระบุในรูปแบบ $(linux_command) ในตัวอย่างต่อไปนี้ คำสั่ง $(date) จะถูกดำเนินการเพื่อแสดงเวลาปัจจุบันภายในพร้อมต์
ramesh@dev-db ~> export PS1="\u@\h [\$(date +%k:%M:%S)]> "
ramesh@dev-db [11:09:56]>
คุณยังสามารถใช้ \t เพื่อแสดงเวลาปัจจุบันในรูปแบบ hh:mm:ss ดังที่แสดงด้านล่าง:
ramesh@dev-db ~> export PS1="\u@\h [\t]> "
ramesh@dev-db [12:42:55]>
คุณยังสามารถใช้ \@ เพื่อแสดงเวลาปัจจุบันในรูปแบบ 12 ชั่วโมงก่อน/หลังเที่ยงดังที่แสดงด้านล่าง:
ramesh@dev-db ~> export PS1="[\@] \u@\h> "
[04:12 PM] ramesh@dev-db>
3. แสดงผลลัพธ์ของคำสั่ง Linux ใด ๆ ในพรอมต์
คุณสามารถแสดงผลลัพธ์ของคำสั่ง Linux ใดก็ได้ในพรอมต์ ตัวอย่างต่อไปนี้แสดงรายการสามรายการที่คั่นด้วย | (ไปป์) ในพรอมต์คำสั่ง:
- \!: หมายเลขประวัติของคำสั่ง
- \h: ชื่อโฮสต์
- $kernel_version: ผลลัพธ์ของคำสั่ง uname -r จากตัวแปร $kernel_version
- \$?: สถานะของคำสั่งสุดท้าย
ramesh@dev-db ~> kernel_version=$(uname -r)
ramesh@dev-db ~> export PS1="\!|\h|$kernel_version|\$?> "
473|dev-db|2.6.25-14.fc9.i686|0>
4. เปลี่ยนสีพื้นหน้าของข้อความแจ้ง
แสดงพรอมต์เป็นสีน้ำเงินพร้อมกับชื่อผู้ใช้ โฮสต์ และข้อมูลไดเรกทอรีปัจจุบัน
$ export PS1="\e[0;34m\u@\h \w> \e[m" [Note: This is for light blue prompt] $ export PS1="\e[1;34m\u@\h \w> \e[m" [Note: This is for dark blue prompt]
- \e[ – ระบุจุดเริ่มต้นของพรอมต์สี
- x;ym - ระบุรหัสสี ใช้ค่ารหัสสีที่กล่าวถึงด้านล่าง
- \e[m – ระบุจุดสิ้นสุดของพรอมต์สี
ตารางรหัสสี:
Black 0;30 Blue 0;34 Green 0;32 Cyan 0;36 Red 0;31 Purple 0;35 Brown 0;33 [Note: Replace 0 with 1 for dark color]
ทำการเปลี่ยนสีอย่างถาวรโดยเพิ่มบรรทัดต่อไปนี้ใน .bash_profile หรือ .bashrc
STARTCOLOR='\e[0;34m';
ENDCOLOR="\e[0m"
export PS1="$STARTCOLOR\u@\h \w> $ENDCOLOR"
5. เปลี่ยนสีพื้นหลังของข้อความแจ้ง
เปลี่ยนสีพื้นหลังโดยระบุ \e[{code}m ในข้อความแจ้ง PS1 ดังที่แสดงด้านล่าง
$ export PS1="\e[47m\u@\h \w> \e[m"
[Note: This is for Light Gray background]
การผสมผสานระหว่างพื้นหลังและเบื้องหน้า
export PS1="\e[0;34m\e[47m\u@\h \w> \e[m"
[Note: This is for Light Blue foreground and Light Gray background]
เพิ่มสิ่งต่อไปนี้ใน .bash_profile หรือ .bashrc เพื่อทำให้พื้นหลังและสีพื้นหน้าด้านบนเป็นแบบถาวร
STARTFGCOLOR='\e[0;34m'; STARTBGCOLOR="\e[47m" ENDCOLOR="\e[0m" export PS1="$STARTFGCOLOR$STARTBGCOLOR\u@\h \w> $ENDCOLOR"
ลองใช้สีพื้นหลังต่อไปนี้และเลือกสีที่เหมาะกับรสนิยมของคุณ:
- \e[40m
- \e[41m
- \e[42m
- \e[43m
- \e[44m
- \e[45m
- \e[46m
- \e[47m
6. แสดงหลายสีในข้อความแจ้ง
คุณยังสามารถแสดงหลายสีได้ในพรอมต์เดียวกัน เพิ่มฟังก์ชันต่อไปนี้ใน .bash_profile
function prompt { local BLUE="\[\033[0;34m\]" local DARK_BLUE="\[\033[1;34m\]" local RED="\[\033[0;31m\]" local DARK_RED="\[\033[1;31m\]" local NO_COLOR="\[\033[0m\]" case $TERM in xterm*|rxvt*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="\u@\h [\t]> " PS1="${TITLEBAR}\ $BLUE\u@\h $RED[\t]>$NO_COLOR " PS2='continue-> ' PS4='$0.$LINENO+ ' }
คุณสามารถเข้าสู่ระบบอีกครั้งเพื่อให้การเปลี่ยนแปลงมีผลหรือแหล่งที่มาของ .bash_profile ดังที่แสดงด้านล่าง
$. ./.bash_profile $ prompt ramesh@dev-db [13:02:13]>
7. เปลี่ยนสีพรอมต์โดยใช้ tput
คุณยังสามารถเปลี่ยนสีของพรอมต์ PS1 โดยใช้ tput ดังที่แสดงด้านล่าง:
$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"
ความสามารถของสี tput:
- tput setab [1-7] – ตั้งค่าสีพื้นหลังโดยใช้ ANSI Escape
- tput setb [1-7] – ตั้งค่าสีพื้นหลัง
- tput setaf [1-7] – ตั้งค่าสีพื้นหน้าโดยใช้ ANSI Escape
- tput setf [1-7] – กำหนดสีพื้นหน้า
ความสามารถของโหมดข้อความ tput:
- ใส่ตัวหนา – ตั้งค่าโหมดตัวหนา
- ใส่สลัว – เปิดโหมด half-bright
- tput smul – เริ่มโหมดขีดเส้นใต้
- tput rmul – ออกจากโหมดขีดเส้นใต้
- tput rev – เปิดโหมดถอยหลัง
- tput smso – เข้าสู่โหมดโดดเด่น (ตัวหนาบน rxvt)
- tput rmso – ออกจากโหมดโดดเด่น
- tput sgr0 – ปิดคุณสมบัติทั้งหมด
รหัสสีสำหรับ tput:
- 0 – สีดำ
- 1 – สีแดง
- 2 – สีเขียว
- 3 – สีเหลือง
- 4 – สีน้ำเงิน
- 5 – สีม่วงแดง
- 6 – สีฟ้า
- 7 – สีขาว
8. สร้างพรอมต์ของคุณเองโดยใช้รหัสที่มีให้สำหรับตัวแปร PS1
ใช้รหัสต่อไปนี้และสร้างพรอมต์ PS1 Linux ส่วนตัวของคุณที่ใช้งานได้และเหมาะกับรสนิยมของคุณ รหัสใดจากรายการนี้จะมีประโยชน์มากสำหรับการใช้งานประจำวัน แสดงความคิดเห็นของคุณและแจ้งให้เราทราบว่าคุณใช้รหัส PS1 ใดสำหรับข้อความแจ้ง Linux
- \a อักขระระฆัง ASCII (07)
- \d วันที่ในรูปแบบ “วันเดือนในสัปดาห์” (เช่น “อังคาร 26 พฤษภาคม”)
- \D{format} – รูปแบบถูกส่งไปยัง strftime(3) และผลลัพธ์จะถูกแทรกลงในสตริงพร้อมต์ รูปแบบว่างส่งผลให้เกิดการแสดงเวลาเฉพาะสถานที่ ต้องจัดฟัน
- \e อักขระหลีก ASCII (033)
- \h ชื่อโฮสต์จนถึงส่วนแรก
- \H ชื่อโฮสต์
- \j จำนวนงานที่จัดการโดยเชลล์ในปัจจุบัน
- \l ชื่อฐานของชื่ออุปกรณ์ปลายทางของเชลล์
- \n ขึ้นบรรทัดใหม่
- \r คืนรถ
- \s ชื่อของเชลล์ ชื่อฐานของ $0 (ส่วนหลังเครื่องหมายทับสุดท้าย)
- \t เวลาปัจจุบันในรูปแบบ 24 ชั่วโมง HH:MM:SS
- \T เวลาปัจจุบันในรูปแบบ HH:MM:SS แบบ 12 ชั่วโมง
- \@ เวลาปัจจุบันในรูปแบบ 12 ชั่วโมงก่อน/หลังเที่ยง
- \A เวลาปัจจุบันในรูปแบบ HH:MM แบบ 24 ชั่วโมง
- \u ชื่อผู้ใช้ของผู้ใช้ปัจจุบัน
- \v เวอร์ชันของ bash (เช่น 2.00)
- \V การเปิดตัว bash เวอร์ชัน + ระดับแพตช์ (เช่น 2.00.0)
- \w ไดเร็กทอรีการทำงานปัจจุบัน โดยมี $HOME ย่อด้วย tilde
- \W ชื่อฐานของไดเร็กทอรีการทำงานปัจจุบัน โดยมี $HOME ย่อด้วย tilde
- \! หมายเลขประวัติของคำสั่งนี้
- \# หมายเลขคำสั่งของคำสั่งนี้
- \$ ถ้า UID ที่มีผลคือ 0, a #, มิฉะนั้น $
- \nnn อักขระที่ตรงกับเลขฐานแปด nnn
- \\ แบ็กสแลช
- \[ เริ่มลำดับของอักขระที่ไม่ได้พิมพ์ ซึ่งสามารถใช้เพื่อฝังลำดับการควบคุมเทอร์มินัลลงในข้อความแจ้ง
- \] สิ้นสุดลำดับของอักขระที่ไม่พิมพ์
9. ใช้ฟังก์ชัน bash shell ภายในตัวแปร PS1
คุณยังสามารถเรียกใช้ฟังก์ชัน bash shell ใน PS1 ได้ตามที่แสดงด้านล่าง
ramesh@dev-db ~> function httpdcount { > ps aux | grep httpd | grep -v grep | wc -l > } ramesh@dev-db ~> export PS1="\u@\h [`httpdcount`]> " ramesh@dev-db [12]> [Note: This displays the total number of running httpd processes]
คุณสามารถเพิ่มบรรทัดต่อไปนี้ใน .bash_profile หรือ .bashrc เพื่อทำการเปลี่ยนแปลงนี้อย่างถาวร:
function httpdcount { ps aux | grep httpd | grep -v grep | wc -l } export PS1='\u@\h [`httpdcount`]> '
10. ใช้เชลล์สคริปต์ภายในตัวแปร PS1
คุณยังสามารถเรียกใช้เชลล์สคริปต์ภายในตัวแปร PS1 ได้อีกด้วย ในตัวอย่างด้านล่าง ~/bin/totalfilesize.sh ซึ่งคำนวณขนาดไฟล์ทั้งหมดของไดเรกทอรีปัจจุบัน จะถูกเรียกใช้ภายในตัวแปร PS1
ramesh@dev-db ~> cat ~/bin/totalfilesize.sh for filesize in $(ls -l . | grep "^-" | awk '{print $5}') do let totalsize=$totalsize+$filesize done echo -n "$totalsize" ramesh@dev-db ~> export PATH=$PATH:~/bin ramesh@dev-db ~> export PS1="\u@\h [\$(totalfilesize.sh) bytes]> " ramesh@dev-db [534 bytes]> cd /etc/mail ramesh@dev-db [167997 bytes]>
[Note: This executes the totalfilesize.sh to display the total file size of the current directory in the PS1 prompt]
คุณปรับแต่ง PS1 ของคุณไปมากแค่ไหน? PS1 ของคุณสามารถเอาชนะ Angelina Jolie ได้หรือไม่? แสดงความคิดเห็นและแชร์ PS1 ของคุณ ค่าพร้อมท์
แนะนำให้อ่าน
Bash Cookbook โดย Carl Albing, JP Vossen และ Cameron Newham . Bash เป็นเชลล์ที่ทรงพลังมาก หนังสือเล่มนี้จะช่วยให้คุณเชี่ยวชาญ bash shell และให้ผลผลิตสูง ไม่ว่าคุณจะเป็นผู้ดูแลระบบ DBA หรือนักพัฒนา คุณต้องเขียนเชลล์สคริปต์ในบางจุด ผู้ดูแลระบบที่ฉลาดรู้ดีว่าเมื่อคุณเชี่ยวชาญเทคนิคการเขียนเชลล์สคริปต์แล้ว คุณสามารถกำหนดให้เซิร์ฟเวอร์ของคุณอยู่ในโหมดนำร่องอัตโนมัติโดยปล่อยให้เชลล์สคริปต์ทำหน้าที่ส่งเสียงฮึดฮัด ในการเข้าสู่โหมดนำร่องอัตโนมัติของผู้ดูแลระบบ คุณจะต้องเชี่ยวชาญตัวอย่างที่ให้ไว้ในตำราอาหารเล่มนี้ มีหนังสือเปลือก Bash ที่เงียบสงบอยู่สองสามเล่ม แต่หนังสือเล่มนี้เป็นอันดับต้น ๆ โดยให้ตัวอย่างโดยละเอียดมากมาย
คำแนะนำหนังสือ Linux เพิ่มเติม:12 หนังสือ Linux ที่น่าทึ่งและจำเป็นสำหรับการเสริมสร้างสมองและห้องสมุดของคุณ
หากคุณชอบบทความนี้ โปรดบุ๊กมาร์กไว้บน del.icio.us และสะดุดมัน