Tôi đã định nghĩa một hàm shell (hãy gọi nó clock
), mà tôi muốn sử dụng như một trình bao bọc cho một lệnh khác, tương tự như time
hàm, ví dụ clock ls -R
.
Hàm shell của tôi thực hiện một số tác vụ và sau đó kết thúc bằng exec "$@"
.
Tôi muốn chức năng này hoạt động ngay cả với các phần tử dựng sẵn, ví dụ như clock time ls -R
sẽ xuất kết quả của phần tử tích time
hợp chứ không phải phần /usr/bin/time
thi hành. Nhưng exec
luôn luôn kết thúc việc chạy lệnh thay thế.
Làm cách nào tôi có thể làm cho hàm Bash của mình hoạt động như một trình bao bọc cũng chấp nhận các hàm dựng sẵn dưới dạng đối số?
Chỉnh sửa : Tôi mới biết rằng đó time
không phải là một Bash tích hợp, mà là một từ dành riêng đặc biệt liên quan đến đường ống dẫn. Tôi vẫn quan tâm đến một giải pháp tích hợp ngay cả khi nó không hoạt động time
, nhưng một giải pháp tổng quát hơn sẽ còn tốt hơn nữa.
exec bash -c \' "$@" \'
. Trừ khi lệnh của bạn trong tham số đầu tiên được nhận dạng là tập lệnh shell, thì nó sẽ được hiểu là tệp nhị phân được chạy trực tiếp. Ngoài ra, và đơn giản hơn, chỉ cần bỏ lỡexec
và gọi"@"
từ vỏ ban đầu của bạn.