ฉันกำหนดฟังก์ชั่นเปลือก (ขอเรียกว่าclock) ซึ่งผมต้องการที่จะใช้เป็นเสื้อคลุมกับคำสั่งอื่นที่คล้ายกับฟังก์ชั่นเช่นtimeclock ls -R
exec "$@"ฉันเปลือกทำหน้าที่งานบางส่วนแล้วปลายด้วย
ฉันต้องการให้ฟังก์ชั่นนี้ทำงานได้แม้มี shell-ins อยู่เช่นclock time ls -Rควรส่งออกผลลัพธ์ของการtimeบิวด์อินไม่ใช่การ/usr/bin/timeประมวลผล แต่execมักจะจบลงด้วยการรันคำสั่งแทน
ฉันจะทำให้ฟังก์ชั่น Bash ของฉันทำงานเป็น wrapper ที่ยอมรับเชลล์บิวด์อินเป็นอาร์กิวเมนต์ได้อย่างไร
แก้ไข : ฉันเพิ่งเรียนรู้ว่าtimeไม่ใช่ Bash ในตัว แต่เป็นคำสงวนพิเศษที่เกี่ยวข้องกับท่อ ฉันยังคงสนใจวิธีแก้ปัญหาสำหรับบิวด์อินแม้ว่าจะไม่สามารถใช้งานได้timeแต่โซลูชันทั่วไปที่ดีกว่าก็ดีกว่า
exec bash -c \' "$@" \'คุณจำเป็นต้องเรียกใช้เปลือกอย่างชัดเจนโดยใช้ ยกเว้นว่าคำสั่งของคุณในพารามิเตอร์แรกเป็นที่รู้จักในฐานะเชลล์สคริปต์จากนั้นคำสั่งนั้นจะถูกตีความว่าเป็นไบนารีที่จะเรียกใช้โดยตรง หรืออีกวิธีง่ายๆเพียงแค่พลาดexecและรับสาย"@"จากเชลล์เดิมของคุณ