การเปิดตัวของ Yash ซึ่งเป็นเชลล์ที่รองรับมาตรฐาน POSIX ได้จุดประกายให้เกิดการถกเถียงที่น่าสนใจในชุมชนนักพัฒนาเกี่ยวกับวิวัฒนาการของอินเตอร์เฟซแบบคำสั่ง โดยเฉพาะในเรื่องการจัดการประวัติคำสั่ง แม้ว่า Yash จะมาพร้อมกับความสามารถในการรองรับมาตรฐาน POSIX และฟีเจอร์ทันสมัย แต่นักพัฒนาก็เริ่มแสดงความต้องการฟังก์ชันการจัดการประวัติคำสั่งที่คำนึงถึงบริบทการทำงานมากขึ้น
เหตุผลที่ต้องการประวัติคำสั่งแยกตามไดเรกทอรี
ประเด็นสำคัญที่ถูกหยิบยกขึ้นมาในการสนทนาของชุมชนคือความต้องการประวัติคำสั่งที่แยกตามบริบทของไดเรกทอรี นักพัฒนามักทำงานกับหลายโปรเจกต์และหลายไดเรกทอรีพร้อมกัน แต่ละที่มีชุดคำสั่งที่ซับซ้อน คำสั่งคอมไพล์ และขั้นตอนการทำงานเฉพาะ การเก็บประวัติคำสั่งแบบรวมศูนย์ในเชลล์ส่วนใหญ่ทำให้ยากต่อการเรียกดูคำสั่งเฉพาะของแต่ละโปรเจกต์ โดยเฉพาะหลังจากสลับบริบทการทำงานหรือรีบูตระบบ
ผมอยากให้มีเชลล์ที่มีตัวเลือกในการเก็บประวัติคำสั่งแยกตามไดเรกทอรี เพื่อที่เมื่อเข้าไปในไดเรกทอรีใดๆ จะสามารถดูได้ว่าครั้งสุดท้ายที่อยู่ในไดเรกทอรีนั้นทำอะไรไว้บ้าง
วิธีแก้ปัญหาและทางเลือกในปัจจุบัน
ชุมชนได้ระบุถึงวิธีแก้ปัญหาที่มีอยู่หลายวิธี เครื่องมืออย่าง Atuin มีฟังก์ชันค้นหาประวัติตามไดเรกทอรีผ่านคำสั่งอย่าง atuin search --cwd .
ในขณะที่ผู้ใช้ Zsh สามารถเพิ่มความสามารถนี้ผ่านปลั๊กอินอย่าง per-directory-history ส่วน NuShell ใช้วิธีการแตกต่างโดยมีระบบเติมคำอัตโนมัติตามบริบทของไดเรกทอรีเป็นค่าเริ่มต้น
โซลูชันปัจจุบันสำหรับประวัติการใช้งานเฉพาะไดเรกทอรี:
- Atuin: รองรับการค้นหาประวัติเฉพาะไดเรกทอรีผ่านคำสั่ง
atuin search --cwd .
- Zsh: มีให้ใช้งานผ่านปลั๊กอิน per-directory-history
- NuShell: มีระบบเติมคำอัตโนมัติตามไดเรกทอรีในตัว
- Direnv: เป็นทางเลือกที่เป็นไปได้ผ่านการจัดการตัวแปรสภาพแวดล้อม
การจัดการประวัติคำสั่งในหลายอินสแตนซ์
อีกประเด็นสำคัญที่นักพัฒนาหยิบยกขึ้นมาคือความท้าทายในการจัดการประวัติคำสั่งเมื่อเปิดใช้งานเชลล์หลายอินสแตนซ์พร้อมกัน วิธีการแบบดั้งเดิมที่เก็บประวัติเฉพาะอินสแตนซ์แรกที่เปิดนั้นไม่เพียงพอสำหรับรูปแบบการพัฒนาสมัยใหม่ เครื่องมืออย่าง Atuin และการตั้งค่าเฉพาะของ Zsh ช่วยให้บันทึกประวัติทันทีในทุกอินสแตนซ์ ป้องกันการสูญหายของประวัติคำสั่งเมื่อระบบดับกะทันหัน
อนาคตของการพัฒนาเชลล์
การถกเถียงนี้แสดงให้เห็นแนวโน้มที่กว้างขึ้นในเครื่องมือสำหรับนักพัฒนา นั่นคือความต้องการสภาพแวดล้อมที่คำนึงถึงบริบทและมุ่งเน้นโปรเจกต์มากขึ้น นักพัฒนาบางคนมองภาพสภาพแวดล้อมเดสก์ท็อปที่ทุกเครื่องมือ ตั้งแต่โปรแกรมแก้ไขโค้ดไปจนถึงเบราว์เซอร์ สามารถรักษาบริบทเฉพาะของแต่ละโปรเจกต์ได้ สิ่งนี้บ่งชี้ว่าการพัฒนาเชลล์ในอนาคตอาจต้องให้ความสำคัญไม่เพียงแค่การรองรับมาตรฐาน POSIX และฟีเจอร์แบบดั้งเดิม แต่ยังต้องปรับปรุงความสามารถในการรับรู้บริบทและการจัดการขั้นตอนการทำงานเฉพาะของแต่ละโปรเจกต์
การตอบรับจากชุมชนชี้ให้เห็นว่าแม้เครื่องมืออย่าง Yash จะโดดเด่นในด้านการรองรับมาตรฐาน POSIX และฟีเจอร์เชลล์แบบดั้งเดิม แต่ยังมีพื้นที่สำหรับนวัตกรรมในการจัดการข้อมูลตามบริบทและการทำงานในหลายอินสแตนซ์ การถกเถียงนี้อาจมีอิทธิพลต่อทิศทางการพัฒนาเชลล์และการออกแบบเครื่องมือคำสั่งในอนาคต
อ้างอิง: Yash: yet another shell