Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

Bash Shell PS1:10 ตัวอย่างในการสร้างพรอมต์ Linux ของคุณเช่น Angelina Jolie

Bash Shell PS1:10 ตัวอย่างในการสร้างพรอมต์ Linux ของคุณเช่น Angelina Jolieรูปภาพจาก f1r3storm85

ในบทความก่อนหน้านี้ เราได้พูดถึงตัวแปรสภาพแวดล้อม 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 และสะดุดมัน