Bun.which: หา executable จาก PATH โดยไม่เรียก shell
CLI ที่พึ่ง executable ภายนอกควรตอบผู้ใช้ให้ได้ตั้งแต่ต้นว่า “หาเครื่องมือนี้ไม่เจอ” แทนการปล่อยให้ subprocess ล้มกลางทาง Bun.which ค้นชื่อคำสั่งจาก PATH และคืน absolute path หรือ null โดยไม่ต้องสร้าง shell command อย่าง which bun
มันเหมือนถามประชาสัมพันธ์ว่าแผนกนี้อยู่ห้องไหน แทนการตะโกนคำสั่งให้ shell ตีความอีกชั้น เราจึงไม่ต้อง quote ชื่อโปรแกรมและไม่เพิ่มช่องทาง shell injection
const bunPath = Bun.which("bun");
if (bunPath === null) {
throw new Error("ไม่พบ bun ใน PATH");
}
const missing = Bun.which("showkhun-command-that-does-not-exist");
if (missing !== null) {
throw new Error("ชื่อทดสอบไม่ควรถูกพบ");
}
console.log(`พบ Bun executable: ${bunPath}`);
เมื่อทำ wrapper สำหรับ toolchain ให้ตรวจผล null แล้วแสดงวิธีแก้ที่ตรงระบบ อย่า fallback ไปดาวน์โหลดหรือรัน installer อัตโนมัติ เพราะเส้นทางติดตั้งเป็นการตัดสินใจของผู้ใช้และเกี่ยวกับ supply chain หากต้องค้นใน PATH เฉพาะของ sandbox ให้ส่ง option PATH ที่ควบคุมได้ แทนการเชื่อ environment ทั้งหมด
การ “พบไฟล์” ยังไม่ยืนยันว่า executable นั้นเป็นเวอร์ชันที่ต้องการหรือเชื่อถือได้ ขั้นถัดไปอาจรัน --version ด้วย argv คงที่และ timeout จากนั้นเทียบ policy แต่ไม่ควรส่งค่าจากผู้ใช้เข้า shell string
Recap
- ตรวจ
nullก่อน spawn dependency ภายนอก - แสดง path ที่พบเพื่อช่วย debug โดย redact ส่วนละเอียดอ่อนเมื่อจำเป็น
- อย่าดาวน์โหลด installer อัตโนมัติเมื่อหาไม่พบ
- ตรวจ version แยกจากการค้นหา path