Các exec
lệnh thay thế quá trình shell hiện với lệnh quy định. Thông thường, khi bạn chạy một lệnh, một quy trình mới được sinh ra (rẽ nhánh). Các exec
lệnh không đẻ trứng một quá trình mới. Thay vào đó, quy trình hiện tại được phủ lên bằng lệnh mới. Nói cách khác, exec
lệnh được thực thi thay cho shell hiện tại mà không tạo ra một quy trình mới.
Có ba cách sử dụng phổ biến nhất của lệnh exec:
1. Thay thế quá trình
Ví dụ-1:
Nếu bạn mở mộtbash
vỏmớinhư
$ bash
trong pstree
đó có vẻ như
Thiết bị đầu cuối
├─bash───bash
bash
Vỏ trước vẫn còn đó và bạn có bash
vỏ mới . Trong khi đó, nếu bạn mở một bash shell mới,
$ exec bash
các pstree
chương trình
Thiết bị đầu cuối
├─bash───pstree
Ở đây cái cũ bash
được thay thế bằng cái mới. Nó đặc biệt hữu ích để thoát khỏi nhiều lần đăng nhập trong một lệnh. Nó an toàn hơn và xóa bỏ cơ hội rời khỏi một thiết bị đầu cuối mở do nhầm lẫn. Xem Thoát khỏi cả root và người dùng bằng một lệnh
Ví dụ-2: bạn có thể mở một tệp như
$ exec vi filename.txt
Khi bạn thoát vi
, không cần phải đóng thiết bị đầu cuối riêng vì vỏ đã được thay thế. Ngay khi bạn đóng vi thì thiết bị đầu cuối cũng được đóng lại.
2. Phương pháp chuyển hướng mô tả tệp trong tập lệnh shell
Các exec
lệnh cũng có thể được sử dụng trong kịch bản shell động mở, đóng, và sao chép file descriptor. Điều đó cho phép thực hiện chuyển hướng STDIN, STDERR, STDOUT và các bộ mô tả tệp khác sang các tệp khác nhau trong tập lệnh shell, thay vì chuỗi lệnh gọi. Nếu bạn không chỉ định một lệnh hoặc đối số, bạn có thể chỉ định các ký hiệu chuyển hướng và mô tả tệp để thực hiện các chức năng này.
Giả sử bạn có tập lệnh shell script.sh
mà bạn muốn có tệp nhật ký script.log
, bạn có thể sử dụng exec
như,
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
tương đương với
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Tạo các giai đoạn của quá trình bằng lệnh exec
Bạn cũng có thể sử dụng lệnh exec để tạo một tập lệnh shell thực thi lẫn nhau theo trình tự như các giai đoạn của quy trình. Thay vì sinh ra các tiến trình mới mỗi lần bạn cần chuyển điều khiển sang tập lệnh tiếp theo, bạn thực thi lệnh exec.
Trong trường hợp này, câu lệnh cuối cùng của mỗi giai đoạn nên là exec
lệnh gọi ra giai đoạn tiếp theo.
Xem việc sử dụng exec
lệnh trong shell script để biết thêm.
Lưu ý: Một phần ở trên được lấy từ này.