neizod's speculation

insufficient data for meaningful answer

ซ่อนบางคำสั่งจากการช่วยเติมคำของ Bash

Wednesday, October 26, 2016, 12:47 PM

ใครสั่งงานคอมพิวเตอร์ผ่าน CLI ที่ต้องพิมพ์คีย์บอร์ดเยอะๆ คงคุ้นเคยกับการเติมคำอัตโนมัติเพื่อช่วยให้ไม่ต้องจดจำคำสั่งจำนวนมาก พร้อมลดปริมาณการกดแป้น (และกำจัดการพิมพ์ผิด) เป็นอย่างดี ลองดูตัวอย่าง

ใช้แรกๆ ก็มีความสุขดี แต่พอระบบเริ่มใหญ่ ต้องลงโปรแกรมเยอะแยะมากมาย ก็จะมีคำสั่งที่ใช้ชื่อต้นซ้ำๆ กันเต็มไปหมด (เช่น apt-getaptitude, pythonpytest) ทำการพิมพ์คำสั่งสั้นๆ เช่นเดิม แล้วหวังว่าโปรแกรมจะช่วยเติมเต็มคำที่เหลือให้นั้นเป็นไปไม่ได้แล้ว

ตอนแรกก็คิดว่าจะแก้ปัญหานี้ด้วยการสร้าง alias มาย่อคำสั่งที่ใช้บ่อย แต่ก็นึกขึ้นได้ว่าการไม่ได้ใช้คอมแค่เครื่องเดียวน่าจะทำให้สับสนกับ alias เวลาต้องเปลี่ยนเครื่อง แถมการกลับมาอ่าน history ที่มีแต่ alias นี่มันไม่สนุกเอาซะเลย

อีกแว๊บนึงก็แอบคิดว่าจะลองปันใจให้กับ Zsh หรือ shell ตัวอื่นๆ ดีมั้ยนะ แต่ก็ยังไม่กล้าลงทุนเริ่มเรียนรู้อะไรใหม่ขนาดนั้น

สุดท้ายไปตั้งคำถามในเว็บลูกของ Stack Overflow แล้วพบว่าความสามารถที่อยากได้นี้เพิ่งมีเพิ่มขึ้นมาสดร้อนๆ เมื่อเดือนที่แล้วใน Bash 4.4 โดยเสนอวิธีแก้ปัญหานี้ด้วยการเพิ่มค่าตัวแปร EXECIGNORE ไปยังจุดเก็บไฟล์คำสั่งที่ไม่ต้องการให้แสดง

$ EXECIGNORE=/path/to/script
$ EXECIGNORE=/path/to/another/script:$EXECIGNORE

เพียงเท่านี้ คำสั่งนั้นๆ ก็จะไม่มากวนใจเวลากด tab เพื่อเติมคำอัตโนมัติแล้ว แต่ถ้ายังอยากจะรันคำสั่งนั้นอยู่ ก็สามารถทำได้เพียงแค่พิมพ์ชื่อคำสั่งให้ครบเท่านั้นเอง

ป.ล. Ubuntu ยังไม่รวมเอา Bash รุ่นใหม่นี้เข้ามาให้ อยากได้ต้อง build เองไปก่อน (โหลดซอร์สมาแล้ว ./configure, make, make install เหมือนเดิม)