Zsh คืออะไร? เหตุผลที่นักพัฒนาชื่นชอบและข้อแตกต่างจาก Bash
ในซีรีส์ที่ผ่านมา เราได้เรียนรู้เกี่ยวกับ "Bash" ซึ่งเป็นราชาแห่งเชลล์ และ "PowerShell" ซึ่งเป็นไพ่ตายของ Windows กันไปแล้ว คุณคงจะสัมผัสได้ถึงพลังของโลกคอมมานด์ไลน์และศักยภาพในการปรับปรุงประสิทธิภาพการทำงานได้อย่างมากใช่ไหมครับ และในครั้งนี้ เพื่อเป็นการปิดท้าย เราจะมาแนะนำ "Zsh" (Z Shell) สุดยอดเชลล์ที่นักพัฒนาหลายคนยกย่องว่า "ถ้าได้ลองใช้แล้วจะกลับไปใช้ตัวอื่นไม่ได้อีกเลย" กันครับ
โดยเฉพาะใน macOS นั้น Zsh ได้ถูกนำมาใช้เป็นเชลล์มาตรฐานมาหลายปีแล้ว ทำให้มันกลายเป็นสิ่งที่นักสร้างสรรค์เว็บไม่สามารถหลีกเลี่ยงได้ "มันต่างจาก Bash อย่างไร?", "ทำไมถึงได้รับความนิยมขนาดนี้?" เราจะมาตอบคำถามเหล่านี้อย่างเข้าใจง่าย พร้อมตัวอย่างที่ให้คุณได้สัมผัสกับฟังก์ชันการทำงานและความรู้สึกในการใช้งานจริง
ถ้าเปรียบ Bash เป็นรถซีดานที่ไว้ใจได้ Zsh ก็เหมือนกับรถสปอร์ตหรูที่เต็มไปด้วยฟังก์ชันอำนวยความสะดวกและปรับแต่งได้อย่างอิสระ เมื่ออ่านบทความนี้จบ คุณจะต้องหลงใหลในเสน่ห์ของ Zsh และจะรู้สึกสนุกกับการเปิดเทอร์มินัลอย่างแน่นอน!
Zsh (Z Shell) คืออะไร?
Zsh เป็นเชลล์ยูนิกซ์ประเภทหนึ่งเช่นเดียวกับ Bash มันถูกพัฒนาขึ้นโดยนำข้อดีของ Bash มาต่อยอดและเพิ่มฟังก์ชันที่ทรงพลังยิ่งขึ้น ด้วยเหตุนี้ การใช้คำสั่งพื้นฐาน (เช่น ls, cd, rm) และไปป์ไลน์ (|) จึงแทบไม่ต่างจาก Bash เลย คุณสามารถนำความรู้เกี่ยวกับ Bash มาใช้ได้ทันที อาจกล่าวได้ว่ามันเป็นเหมือน Bash เวอร์ชันอัปเกรดก็ไม่ผิดนัก
แล้วอะไรคือเหตุผลที่ Zsh ได้รับการสนับสนุนอย่างล้นหลามจากนักพัฒนา? ความลับนั้นอยู่ที่ 3 คุณสมบัติหลักต่อไปนี้:
- ฟังก์ชันการเติมคำสั่งที่ทรงพลัง: ช่วยลดข้อผิดพลาดในการพิมพ์และเพิ่มความเร็วในการทำงานได้อย่างมาก
- ฟังก์ชันอำนวยความสะดวกที่ชาญฉลาด: เต็มไปด้วยฟังก์ชันที่รู้ใจ เช่น การย้ายไดเรกทอรีแบบย่อ
- ความสามารถในการปรับแต่งที่หลากหลาย: หากใช้เฟรมเวิร์กอย่าง "Oh My Zsh" คุณจะสามารถปรับแต่งหน้าตาและฟังก์ชันการทำงานได้อย่างไม่จำกัดตามใจชอบ
การได้ลองสัมผัสความแตกต่างด้วยตัวเองย่อมดีกว่าการฟังคำอธิบาย ในส่วนถัดไป เรามาดูฟังก์ชันที่น่าทึ่งของ Zsh กันดีกว่า
สัมผัสเสน่ห์ของ Zsh! ฟังก์ชันเด็ดที่เห็นความต่างจาก Bash
ในส่วนนี้ เราจะแนะนำฟังก์ชันเด่นๆ ของ Zsh ที่คุณสามารถสัมผัสได้ง่ายๆ ลองใช้คำสั่งเหล่านี้ในเทอร์มินัลของคุณดูนะครับ (ในสภาพแวดล้อม macOS หรือ Linux ที่ติดตั้ง Zsh)
1. "ฟังก์ชันการเติมคำสั่ง" ที่ฉลาดเกินไป
การพิมพ์คำสั่งหรือชื่อไฟล์เพียงบางส่วนแล้วกด Tab เพื่อให้ระบบเติมส่วนที่เหลือให้เป็นฟังก์ชันที่ Bash ก็มี แต่ฟังก์ชันการเติมคำสั่งของ Zsh นั้นล้ำหน้าไปกว่ามาก
ตัวอย่างเช่น เมื่อคุณลืมออปชันของคำสั่ง git ลองพิมพ์ git checkout - แล้วกด Tab ดูสิครับ
$ git checkout -[กดปุ่ม Tab]
จากนั้น รายการออปชันที่ใช้ได้จะปรากฏขึ้นพร้อมคำอธิบาย และคุณสามารถใช้ปุ่มลูกศรเพื่อเลือกได้เลย ไม่จำเป็นต้องไปเปิดหาคู่มืออีกต่อไป
การย้ายไดเรกทอรี่ยังฉลาดขึ้นอีกด้วย ตัวอย่างเช่น หากคุณต้องการย้ายไปยังไดเรกทอรีที่อยู่ลึกมากๆ คุณสามารถพิมพ์แค่ตัวอักษรแรกของแต่ละชั้นเพื่อทำการเติมคำสั่งได้
$ cd /u/l/b[กดปุ่ม Tab]
# จะถูกเติมให้โดยอัตโนมัติเป็น
$ cd /usr/local/bin/
2. ย้ายไดเรกทอรีโดยไม่ต้องใช้คำสั่ง `cd`
ใน Zsh หากเปิดใช้งานออปชัน setopt AUTO_CD คุณสามารถย้ายไปยังไดเรกทอรีได้เพียงแค่พิมพ์ชื่อไดเรกทอรีนั้นๆ เหมือนกับการใช้คำสั่ง cd
$ ../../
# ย้ายไปยังไดเรกทอรีชั้นบน 2 ระดับ
3. การค้นหาไฟล์ขั้นสูง (Globbing)
Globbing คือการขยายชื่อไฟล์โดยใช้อักขระตัวแทน (เช่น *) ใน Zsh นั้นทรงพลังมาก
ตัวอย่างเช่น หากคุณต้องการค้นหาไฟล์ที่มีนามสกุล .html ทั้งหมดที่อยู่ในไดเรกทอรีย่อยทั้งหมดภายใต้ไดเรกทอรีปัจจุบัน คุณสามารถเขียนได้ดังนี้:
$ ls **/*.html
** หมายถึงการค้นหาแบบวนซ้ำ (recursive) การทำเช่นนี้ใน Bash ต้องมีการตั้งค่าเพิ่มเติมและค่อนข้างยุ่งยาก
"Oh My Zsh" เฟรมเวิร์กที่จะทำให้ Zsh ของคุณเทพที่สุด
สิ่งที่ดึงศักยภาพสูงสุดของ Zsh ออกมาได้คือ "เฟรมเวิร์ก" อย่าง Oh My Zsh นี่คือระบบที่ช่วยให้การจัดการการตั้งค่า, ปลั๊กอิน, และธีมที่สะดวกของ Zsh เป็นเรื่องง่าย
โดยเฉพาะอย่างยิ่ง เมื่อติดตั้ง Oh My Zsh ที่มีชื่อเสียง คุณจะได้รับประโยชน์ดังต่อไปนี้ทันที:
- Alias ที่สะดวกสบาย: ตัวอย่างเช่น คำสั่งที่ใช้บ่อยในการทำงานกับ Git อย่าง
git statusจะสามารถรันได้ด้วยgstหรือgit pushด้วยgp - การเชื่อมต่อกับ Git ที่ดียิ่งขึ้น: ชื่อ branch ปัจจุบันของ Git และสถานะการเปลี่ยนแปลงจะแสดงอยู่บน prompt (บรรทัดรับคำสั่ง) ตลอดเวลา ช่วยป้องกันความผิดพลาดในการทำงาน
- ธีมที่หลากหลาย: คุณสามารถเปลี่ยนหน้าตาของ prompt ได้ในพริบตา โดยเลือกจากดีไซน์หลายร้อยแบบที่คุณชอบ
การตั้งค่าเหล่านี้ด้วยตัวเองอาจเป็นเรื่องยุ่งยาก แต่ด้วย Oh My Zsh คุณสามารถนำการตั้งค่าที่สะดวกสบายซึ่งสร้างโดยนักพัฒนาทั่วโลกมาเป็นของคุณได้ในเวลาไม่กี่นาที
ความเข้ากันได้กับ Bash และข้อควรระวังในการเขียนสคริปต์
ดังที่เราได้เห็นมา การใช้งานแบบโต้ตอบนั้น Zsh สามารถใช้แทน Bash ได้เกือบทั้งหมด แต่เมื่อเขียนเชลล์สคริปต์ มีความแตกต่างที่สำคัญอย่างหนึ่งที่คุณควรตระหนัก
นั่นคือ หมายเลขเริ่มต้นของดัชนี (index) ของอาร์เรย์
ในกรณีของ Bash (ดัชนีเริ่มจาก 0):
#!/bin/bash
my_array=("apple" "banana" "cherry")
echo ${my_array[0]} # -> apple
ในกรณีของ Zsh (ดัชนีเริ่มจาก 1):
#!/bin/zsh
my_array=("apple" "banana" "cherry")
echo $my_array[1] # -> apple
ความแตกต่างนี้อาจเป็นสาเหตุของข้อผิดพลาดที่ไม่คาดคิดเมื่อนำสคริปต์ที่เขียนสำหรับ Bash ไปรันบน Zsh การเขียน shebang (เช่น #!/bin/bash) ในบรรทัดแรกของสคริปต์ให้ถูกต้องเพื่อระบุว่าสคริปต์นั้นตั้งใจให้รันด้วยเชลล์ใดจึงเป็นเรื่องสำคัญ
สรุป
ในครั้งนี้ เราได้อธิบายถึงเสน่ห์ของเชลล์ "Zsh" ซึ่งกลายเป็นมาตรฐานของ macOS และเป็นที่ชื่นชอบของนักพัฒนาจำนวนมาก
- สามารถใช้ความรู้เกี่ยวกับ Bash ได้ในขณะที่ใช้ฟังก์ชันที่สะดวกยิ่งขึ้น
- ฟังก์ชันการเติมคำสั่งที่ทรงพลังช่วยลดการพิมพ์และป้องกันข้อผิดพลาด
- สามารถปรับแต่งหน้าตาและฟังก์ชันได้อย่างอิสระด้วยเฟรมเวิร์กอย่าง Oh My Zsh
Zsh เป็นเครื่องมือที่ทรงพลังอย่างยิ่งที่สามารถเปลี่ยนการทำงานบนคอมมานด์ไลน์ในแต่ละวันจาก "งานที่น่าเบื่อ" ให้เป็น "ประสบการณ์ที่สะดวกสบายและสร้างสรรค์" ในฐานะนักสร้างสรรค์เว็บ การใช้ Zsh ให้คล่องแคล่วถือเป็นข้อได้เปรียบอย่างมากในยุคที่ต้องทำงานกับเซิร์ฟเวอร์และเครื่องมืออย่าง Git
สำหรับคุณที่คิดว่า "อยากจะลองติดตั้ง Zsh ในเครื่องของตัวเองดูบ้าง!" ในบทความหน้า เราจะอธิบายขั้นตอนที่เป็นรูปธรรมในการติดตั้ง Zsh และ Oh My Zsh บน macOS และ Linux รวมถึงการตั้งค่าเริ่มต้น อย่าลืมติดตามนะครับ!
วิธีการติดตั้ง Zsh (macOS / Linux) และคู่มือการตั้งค่าเริ่มต้น