หลายคนไม่คิดว่า command line prompt เป็นองค์ประกอบที่มีประโยชน์ หรือไม่ได้สนใจมันมากนัก อย่างไรก็ตาม prompt ที่มีประโยชน์สามารถเปลี่ยนวิธีที่คุณใช้บรรทัดคำสั่ง และต่อเนื่องไปสู่ระบบของคุณ บทความนี้แสดง Bash prompts ที่มีประโยชน์และน่าสนใจพร้อมตัวอย่าง หมายเหตุ: เริ่มจาก prompts เอง แล้วค่อยให้คำแนะนำเพิ่มเติมเกี่ยวกับการทำงานกับพวกมัน
นี่มี Bash prompts ไม่กี่ตัว และไม่ใช่ทุกตัวจะ serious ตัวอย่างเช่น รายการแรกอาจทำให้คุณยิ้มได้เวลาใช้บรรทัดคำสั่ง!
1. แสดง "Kaomoji" เมื่อคำสั่งทำงานสำเร็จ
Prompt นี้สนุกและมีประโยชน์! แนวคิดคือ ตราบใดที่คุณ execute คำสั่งสำเร็จ prompt จะแสดง kaomoji ที่มีความสุข
ในทางตรงข้าม เมื่อคำสั่งล้มเหลว จะเห็น kaomoji หน้าตาซึม
เพื่อใช้งาน ให้ใช้โค้ดต่อไปนี้:
PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]$ "
ดูสับสน แต่เราใช้ if statements เพื่อตรวจสอบว่าคำสั่งดีหรือแย่ จากนั้นใช้ escaping รอบ kaomoji เพื่อให้แสดงผลถูกต้อง
2. เปลี่ยนสี Bash Prompt เมื่อเทอร์มินัลให้คำสั่งที่ผิด
可以说 这是 列表中 最有用的 提示符。像上面一样,如果上一条命令运行失败,提示符会改变颜色,但也会缩短长路径,并包含每个命令的 Bash 历史编号,以便轻松检索。
PROMPT_COMMAND='PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\[\033[32m\]"; else echo "\[\033[31m\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\W"; else echo "\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0:`hostname -s`:`pwd`\007"'"
อีกครั้ง ดูยากต่อการนำไปใช้ แต่จริงๆ แล้วตรงไปตรงมา เราใช้ if statements อีกครั้ง พร้อม color codes เพื่อไฮไลท์ข้อความต่างๆ
คุณสามารถทำให้สีเหล่านี้เป็นอะไรก็ได้ แตเราขอแนะนำให้ใช้ความคิดที่มีเหตุผล สีที่เปลี่ยนควรช่วยคุณ ไม่ใช่แค่เปลี่ยนเพื่อเปลี่ยน
3. กระจาย Bash Prompts หลายบรรทัด
บางครั้งคุณอาจอยากใส่ข้อมูลมากใน Bash prompts หากคุณเป็นคนแบบนี้ Bash prompt นี้อาจน่าสนใจ มันแสดง date, time, full directory path, user และ host names, active terminal, และแม้แต่ file count และ space usage
PS1="\n\[\033[35m\]$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
ที่นี่ ไม่ต้อง if statements เพราะ prompt เองมี layout แบบ static แต่เนื้อหา dynamic คุณอาจพบว่ายากที่จะ parse องค์ประกอบต่างๆ ในตัวนี้ คำแนะนำคือ ใช้งานมัน แล้ววิ่งดู prompt ชิ้นชิ้น ด้วย cross-referencing เล็กน้อย คุณจะเริ่มเข้าใจว่า prompt รวมกันอย่างไร
4. ใช้สีเพื่อให้ Bash Prompt อ่านง่ายขึ้น
ไม่มีอะไร fancy ใน prompt นี้นอกจากการใช้สีที่ดีในการแยกข้อมูลต่างๆ ดูแล้วจะเห็นว่ามันให้ time, user และ host names, และ current directory
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]$ "
นี่คือหนึ่งใน Bash prompts ที่มีประโยชน์ที่สุด และเป็นพื้นที่ที่คุณจะมองหาเป็นอันแรกเพื่อปรับแต่ง prompt ของคุณ มันให้ basis ที่ดีในการเรียนรู้ว่า custom prompt ทำงานอย่างไร
5. แสดง Full Directory Path
คล้ายกับการใช้สี prompt นี้สะอาดและ minimal เป็น two-line prompt (แม้จะมีบรรทัดว่างบนสุด)
แสดง full working directory path บนบรรทัดแรก ตามด้วย user ที่ด้านล่าง
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"
หากไม่ต้องการบรรทัดว่างใน prompt ให้เอา \n ตัวแรกออก อย่างไรก็ตาม ลองเล่นกับ layout และ formatting เพราะประสบการณ์เทอร์มินัลแต่ละเครื่องจะต่างกันไปขึ้นอยู่กับคอมพิวเตอร์และการตั้งค่าบรรทัดคำสั่ง
6. แสดงจำนวน Background Jobs
Two-liner นี้แสดงข้อมูลที่ยังไม่ได้ใช้ใน Bash prompts ของเรา ให้ running tally ของ background jobs จะมีประโยชน์หากคุณ multitask แต่ต้องติดตามกิจกรรม
บรรทัดแรกคือ user และ host name พร้อม working directory path บรรทัดที่สองมี history number และ count ของ jobs ที่รันใน background
PS1='\[\e[1;32m\]\u@\H:\[\e[m\] \[\e[1;37m\]\w\[\e[m\]\n\[\e[1;33m\]hist:\! \[\e[0;33m\] \[\e[1;31m\]jobs:\j \$\[\e[m\] '
ไม่มีอะไรมากในตัวนี้ แต่อาจให้ข้อมูลกิจกรรมระบบที่ต้องการมาก คุณอาจทำให้ซับซ้อนขึ้นและเพิ่ม if statements และ color coding เพื่อแจ้งเตือนเมื่อ job ถึงระดับหนึ่งๆ
7. แสดงข้อมูลสำหรับ Working Directory
ตัวนี้แสดง user และ host name, job count, และ date และ time บนบรรทัดบน ด้านล่างคือ current directory พร้อมจำนวนไฟล์ในไดเรกทอรีและข้อมูล disk usage
PS1="\n\[\e[30;1m\]\[\016\]l\[\017\](\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\j\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\](\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, $(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\]))--> \[\e[0m\]"
ปัญหาใหญ่ของ prompts ทั้งหมดคือการเข้าใจว่ากำลังเกิดอะไรขึ้นรอบ formatting และ escaping แต่เหมือนกับ multi-line prompts ควรจัดการชิ้นชิ้นจนเข้าใจโครงสร้างโดยรวม
คุณอาจใส่ส่วนๆ ไปเรื่อยๆ แล้วบันทึกว่าแสดงผลหรือมี error แล้วค่อยเพิ่มจนครบ
8. สร้าง Bash Prompts ของคุณเอง
คุณสามารถรวม prompts ทั้งหมดข้างต้นเพื่อสร้าง custom Bash prompts ของตัวเอง ตัวอย่างนี้เป็นการปรับแต่งจากหมายเลข 7 แต่เปลี่ยนให้ใช้พื้นที่น้อยลง และรวมข้อมูลเฉพาะที่เกี่ยวข้อง
Two-line style เสมอ compact มากกว่า เพราะเห็น full path โดยไม่ลดพื้นที่สำหรับคำสั่งที่ใช้
PS1="\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n(\[\[\e[37;1m\]! \!\[\e[32;1m\])-> \[\e[0m\]"
ตอนนี้คุณน่าจะเข้าใจว่า prompt นี้ทำอะไร แต่คำแนะนำคือ ลองสร้างของตัวเองแทนการ copy วาง เพื่อเริ่มเรียนรู้ว่า elements ต่างๆ ทำงานร่วมกันอย่างไร และอาจคิดค้น custom Bash prompts ของตัวเองได้
คำถามที่พบบ่อย
1. ทำไมต้องใช้ Bash prompts ที่ต่างกัน?
มีหลายเหตุผล แต่ productivity เป็นข้อพิจารณาสำคัญ หากคุณใช้บรรทัดคำสั่งบ่อย จะเห็น prompt ทุกไม่กี่วินาที หากใส่ข้อมูลสำคัญที่สุดไว้ใน prompt คุณจะมีข้อมูลนั้นทุก lúc
ในหลายกรณี การใช้ custom Bash prompt มีประสิทธิภาพมากกว่าการเปิดหน้าต่างหลายหน้าต่าง
2. เพิ่ม Bash prompts นี้ใน Terminal output ยังไง?
เพื่อใช้ prompt ใดๆ สามารถ copy และ paste โค้ดเข้า Terminal app ได้ อย่างไรก็ตาม จะใช้ได้เฉพาะ current session เท่านั้น ทฤษฎีแล้ว ต้องทำทุกครั้งที่เปิด Terminal
หากต้องการทำให้ permanent ให้ paste code snippets ไปท้ายไฟล์ ~/.bashrc และ restart Terminal
3. Bash prompts นี้ใช้กับ shells อื่นได้ไหม?
ในหลายกรณี จะพบ cross-compatibility กับ shells อื่นๆ แต่ไม่รับประกัน 100% parity
ดูโพสต์ของเราเกี่ยวกับ การปรับแต่ง Mac Terminal ใช้ zsh จะเห็นความแตกต่างเล็กน้อย แต่ similarities เยอะ
4. หาข้อมูลและ elements ที่เพิ่มใน Bash prompts ได้ได้จากไหน?
เกือบทุก element ของระบบสามารถแสดงใน Bash prompt ได้ ต้องดู Bash variables เพราะนี่คือวิธี "ปลดล็อก" elements ต่างๆ
ทรัพยากรดีสำหรับเข้าใจว่าสามารถเปลี่ยนอะไรได้คือเว็บไซต์ Linux.com แนะนำให้เก็บ documentation นั้นไว้ตลอดการปรับแต่ง
5. หากไม่ต้องการใช้ custom Bash prompts แล้ว ทำไง?
คำตอบง่ายคือ เปิด config file ลบบรรทัดที่เกี่ยวข้อง ไม่ต้องรันคำสั่งเพิ่มเติม แม้อาจ值得 restart Terminal หากไม่เห็นการเปลี่ยนแปลงที่คาดหวัง
หากคุณใช้บรรทัดคำสั่งเป็นประจำ หรือมีความต้องการเฉพาะเมื่อเปิด Terminal app การปรับแต่ง prompt อาจเป็นความคิดที่ดี มันไม่ต้องการความรู้มาก และในหลายกรณี คุณสามารถหา prompt ที่ต้องการจากนักพัฒนาคนอื่นได้