ฉันใช้ Bash เป็นเชลล์เชิงโต้ตอบของฉันและฉันสงสัยว่ามีวิธีง่ายๆในการทำให้ Bash เรียกใช้คำสั่งระบบแทนคำสั่ง shell builtin ในกรณีที่พวกเขาทั้งสองใช้ชื่อเดียวกันร่วมกัน
ตัวอย่างเช่นใช้ระบบkill
(จากutil-linux
) เพื่อพิมพ์รหัสกระบวนการ (pid) ของกระบวนการที่ระบุชื่อ (es) แทนการส่งสัญญาณ:
$ /bin/kill -p httpd
2617
...
โดยไม่ระบุพา ธ แบบเต็มของคำสั่งระบบ Bash builtin จะถูกใช้แทนคำสั่งระบบ kill
builtin ไม่ได้มี-p
ตัวเลือกเพื่อให้คำสั่งล้มเหลว:
$ kill -p httpd
bash: kill: p: invalid signal specification
ฉันพยายามตอบที่ระบุไว้ในทำให้การใช้งานภายนอกทุบตี `คำสั่ง time` มากกว่าเปลือก builtinแต่ส่วนใหญ่ของพวกเขาทำงานเพียงเพราะtime
เป็นจริงเปลือกคำหลัก - ไม่เปลือกbuiltin
นอกเหนือจากการปิดการใช้งาน Bash builtin ชั่วคราวenable -n kill
แล้วทางออกที่ดีที่สุดที่ฉันเคยเห็นคือการใช้:
$(which kill) -p httpd
มีวิธีอื่นที่ง่ายกว่า (เกี่ยวข้องกับการพิมพ์น้อยกว่า) ในการดำเนินการคำสั่งภายนอกแทนเชลล์บิวด์อินหรือไม่?
โปรดทราบว่าkill
เป็นเพียงตัวอย่างและฉันต้องการโซลูชันทั่วไปที่คล้ายกับวิธีที่คำนำหน้าด้วยcommand
builtin ป้องกันไม่ให้ฟังก์ชันที่มีชื่อเดียวกันกับคำสั่งภายนอกทำงาน ในกรณีส่วนใหญ่ฉันมักจะชอบใช้ builtin version เพราะมันช่วยในการฟอร์กกระบวนการใหม่และบางครั้ง builtin ก็มีฟีเจอร์ที่คำสั่งภายนอกไม่มี
$(…)
- เห็นนี้ , นี้และนี้
which kill
ใน backticks (ไม่สามารถใส่ไว้ในความคิดเห็น) จะสั้นกว่าเล็กน้อย