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