exec
thường được sử dụng trong các tập lệnh shell mà chủ yếu đóng vai trò là trình bao bọc để bắt đầu các tệp nhị phân khác. Ví dụ:
#!/bin/sh
if stuff;
EXTRA_OPTIONS="-x -y -z"
else
EXTRA_OPTIONS="-a foo"
fi
exec /usr/local/bin/the.real.binary $EXTRA_OPTIONS "$@"
để sau khi trình bao bọc kết thúc chạy, nhị phân "thực" sẽ tiếp quản và không còn bất kỳ dấu vết nào của tập lệnh trình bao tạm thời chiếm cùng một vị trí trong bảng quy trình. Nhị phân "thực" là một đứa con trực tiếp của bất cứ thứ gì đưa ra nó thay vì một đứa cháu.
Bạn cũng đề cập đến chuyển hướng I / O trong câu hỏi của bạn. Đó là một trường hợp sử dụng hoàn toàn khác exec
và không liên quan gì đến việc thay thế vỏ bằng một quy trình khác. Khi exec
không có đối số, như vậy:
exec 3>>/tmp/logfile
sau đó các chuyển hướng I / O trên dòng lệnh có hiệu lực trong quy trình shell hiện tại, nhưng quá trình shell hiện tại tiếp tục chạy và chuyển sang lệnh tiếp theo trong tập lệnh.