Exec - Lệnh Linux - Lệnh Unix

exec - Gọi quy trình con

Tóm tắc

exec ? công tắc ? arg ? arg ... ?

Sự miêu tả

Lệnh này xử lý các đối số của nó như là đặc tả của một hoặc nhiều tiến trình con để thực hiện. Các đối số có dạng của một đường ống vỏ tiêu chuẩn trong đó mỗi arg trở thành một từ của một lệnh, và mỗi lệnh riêng biệt trở thành một tiến trình con.

Nếu các đối số ban đầu cho exec bắt đầu bằng - thì chúng được coi là các công tắc dòng lệnh và không phải là một phần của đặc tả đường ống. Các công tắc sau đây hiện được hỗ trợ:

- giữ gìn

Giữ lại một dòng mới trong đầu ra của đường ống. Thông thường, một dòng mới sẽ bị xóa.

- -

Đánh dấu kết thúc công tắc. Các đối số sau này sẽ được coi là arg đầu tiên ngay cả khi nó bắt đầu với một - .

Nếu một arg (hoặc cặp của arg 's) có một trong các hình thức mô tả dưới đây thì nó được sử dụng bởi exec để kiểm soát dòng chảy của đầu vào và đầu ra giữa các subprocess (es). Các đối số như vậy sẽ không được chuyển cho các tiến trình con. Trong các biểu mẫu như `` < fileName '', tên tệp có thể nằm trong một đối số riêng biệt từ `` <'' hoặc trong cùng một đối số không có khoảng trống xen kẽ (tức là `` < tên tệp '').

|

Phân tách các lệnh riêng biệt trong đường ống. Đầu ra tiêu chuẩn của lệnh trước sẽ được đưa vào đầu vào tiêu chuẩn của lệnh tiếp theo.

| &

Phân tách các lệnh riêng biệt trong đường ống. Cả hai đầu ra tiêu chuẩn và lỗi tiêu chuẩn của lệnh trước sẽ được đưa vào đầu vào tiêu chuẩn của lệnh tiếp theo. Biểu mẫu chuyển hướng này sẽ ghi đè các biểu mẫu như 2> và> &.

< tên tệp

Tệp được đặt tên bởi tệpName được mở và được sử dụng làm đầu vào chuẩn cho lệnh đầu tiên trong đường dẫn.

<@ fileId

FileId phải là số nhận dạng cho một tệp mở, chẳng hạn như giá trị trả về từ cuộc gọi trước đó để mở . Nó được sử dụng làm đầu vào tiêu chuẩn cho lệnh đầu tiên trong đường ống. FileId phải được mở để đọc.

<< giá trị

Giá trị được chuyển đến lệnh đầu tiên làm đầu vào tiêu chuẩn của nó.

> tên tệp

Đầu ra tiêu chuẩn từ lệnh cuối cùng được chuyển hướng đến tệp có tên fileName , ghi đè nội dung trước đó của nó.

2> tên tệp

Lỗi tiêu chuẩn từ tất cả các lệnh trong đường ống được chuyển hướng đến tệp có tên là fileName , ghi đè nội dung trước đó của nó.

> & tên tệp

Cả hai đầu ra tiêu chuẩn từ lệnh cuối cùng và lỗi tiêu chuẩn từ tất cả các lệnh đều được chuyển hướng đến tệp có tên fileName , ghi đè nội dung trước đó của nó.

>> tên tệp

Đầu ra tiêu chuẩn từ lệnh cuối cùng được chuyển hướng đến tệp có tên fileName , gắn thêm vào nó thay vì ghi đè lên nó.

2 >> tên tệp

Lỗi tiêu chuẩn từ tất cả các lệnh trong đường ống được chuyển hướng đến tệp có tên là fileName , thêm vào đó thay vì ghi đè lên nó.

>> & tên tệp

Cả hai đầu ra tiêu chuẩn từ lệnh cuối cùng và lỗi tiêu chuẩn từ tất cả các lệnh đều được chuyển hướng đến tệp có tên fileName , gắn thêm vào nó thay vì ghi đè lên nó.

> @ fileId

FileId phải là số nhận dạng cho một tệp mở, chẳng hạn như giá trị trả về từ cuộc gọi trước đó để mở . Đầu ra tiêu chuẩn từ lệnh cuối cùng được chuyển hướng đến tệp của fileId , tệp này phải được mở để ghi.

2> @ tệpId

FileId phải là số nhận dạng cho một tệp mở, chẳng hạn như giá trị trả về từ cuộc gọi trước đó để mở . Lỗi tiêu chuẩn từ tất cả các lệnh trong đường dẫn được chuyển hướng đến tệp của fileId . Tệp phải được mở để viết.

> & @ fileId

FileId phải là số nhận dạng cho một tệp mở, chẳng hạn như giá trị trả về từ cuộc gọi trước đó để mở . Cả hai đầu ra tiêu chuẩn từ lệnh cuối cùng và lỗi tiêu chuẩn từ tất cả các lệnh đều được chuyển hướng đến tệp của fileId . Tệp phải được mở để viết.

Nếu đầu ra tiêu chuẩn không được chuyển hướng thì lệnh exec trả về kết quả đầu ra tiêu chuẩn từ lệnh cuối cùng trong đường ống. Nếu bất kỳ lệnh nào trong đường ống thoát ra bất thường hoặc bị giết hoặc bị treo, thì exec sẽ trả về lỗi và thông báo lỗi sẽ bao gồm đầu ra của đường dẫn, sau đó là thông báo lỗi mô tả các chấm dứt bất thường; biến errorCode sẽ chứa thông tin bổ sung về việc chấm dứt bất thường cuối cùng gặp phải. Nếu bất kỳ lệnh nào ghi vào tệp lỗi chuẩn của nó và lỗi chuẩn đó không được chuyển hướng, thì exec sẽ trả về một lỗi; thông báo lỗi sẽ bao gồm đầu ra tiêu chuẩn của đường ống, tiếp theo là thông báo về các chấm dứt bất thường (nếu có), theo sau là đầu ra lỗi chuẩn.

Nếu ký tự cuối cùng của kết quả hoặc thông báo lỗi là một dòng mới thì ký tự đó thường bị xóa khỏi kết quả hoặc thông báo lỗi. Điều này phù hợp với các giá trị trả về Tcl khác, thường không kết thúc bằng dòng mới. Tuy nhiên, nếu -keepnewline được chỉ định thì đường mới cuối được giữ lại.

Nếu đầu vào tiêu chuẩn không được chuyển hướng với `` <'' hoặc `` << '' hoặc `` <@ '' thì đầu vào tiêu chuẩn cho lệnh đầu tiên trong đường ống được lấy từ đầu vào tiêu chuẩn hiện tại của ứng dụng.

Nếu arg cuối cùng là `` & '' thì đường ống sẽ được thực hiện ở chế độ nền. Trong trường hợp này, lệnh exec sẽ trả về một danh sách có các phần tử là các mã định danh quá trình cho tất cả các quy trình con trong đường ống. Đầu ra tiêu chuẩn từ lệnh cuối cùng trong đường ống sẽ đi đến đầu ra tiêu chuẩn của ứng dụng nếu nó chưa được chuyển hướng và đầu ra lỗi từ tất cả các lệnh trong đường dẫn sẽ đi tới tệp lỗi chuẩn của ứng dụng trừ khi được chuyển hướng.

Từ đầu tiên trong mỗi lệnh được lấy làm tên lệnh; thay thế dấu ngã được thực hiện trên nó, và nếu kết quả không chứa dấu gạch chéo thì các thư mục trong biến môi trường PATH được tìm kiếm cho một tệp thực thi theo tên đã cho. Nếu tên có dấu gạch chéo thì nó phải tham chiếu đến một tệp có thể truy cập có thể thực thi từ thư mục hiện tại. Không có `` glob '' mở rộng hoặc các thay thế giống như shell khác được thực hiện trên các đối số cho các lệnh.

Vấn đề về tính di động

Windows (tất cả các phiên bản)

Đọc từ hoặc ghi vào ổ cắm, sử dụng ký hiệu `` @ fileId '', không hoạt động. Khi đọc từ một socket, một ứng dụng DOS 16-bit sẽ treo và một ứng dụng 32-bit sẽ trở lại ngay lập tức với phần cuối của tập tin. Khi một trong hai loại ứng dụng ghi vào một socket, thông tin thay vào đó được gửi đến bàn điều khiển, nếu có, hoặc bị loại bỏ.

Tiện ích văn bản bảng điều khiển Tk không cung cấp khả năng IO chuẩn. Trong Tk, khi chuyển hướng từ đầu vào tiêu chuẩn, tất cả các ứng dụng sẽ thấy một tệp kết thúc ngay lập tức; thông tin được chuyển hướng đến đầu ra tiêu chuẩn hoặc lỗi chuẩn sẽ bị loại bỏ.

Một trong hai dấu gạch chéo về phía trước hoặc phía sau được chấp nhận làm dấu tách đường dẫn cho các đối số cho các lệnh Tcl. Khi thực hiện một ứng dụng, tên đường dẫn được chỉ định cho ứng dụng cũng có thể chứa các dấu gạch chéo tiến hoặc lùi như các dấu tách đường dẫn. Tuy nhiên, hãy nhớ rằng hầu hết các ứng dụng Windows chấp nhận các đối số với các dấu gạch chéo về phía trước chỉ như các dấu phân tách tùy chọn và các dấu gạch chéo ngược chỉ trong các đường dẫn. Bất kỳ đối số nào cho ứng dụng chỉ định tên đường dẫn có dấu gạch chéo sẽ không tự động được chuyển đổi để sử dụng ký tự dấu gạch chéo ngược. Nếu một đối số chứa dấu gạch chéo về phía trước làm dấu tách đường dẫn, nó có thể hoặc không thể được nhận dạng dưới dạng tên đường dẫn, tùy thuộc vào chương trình.

Ngoài ra, khi gọi một ứng dụng DOS 16-bit hoặc Windows 3.X, tất cả các tên đường dẫn phải sử dụng định dạng đường dẫn ngắn, khó hiểu (ví dụ: sử dụng `` applba ~ 1.def '' thay vì `` applbakery.default '' ).

Hai hoặc nhiều dấu gạch chéo tiến hoặc lùi trong một hàng trong một đường dẫn tham chiếu đến đường dẫn mạng. Ví dụ, một phép nối đơn giản của thư mục gốc c: / với thư mục con / windows / system sẽ sinh ra c: // windows / system (hai dấu gạch chéo với nhau), tham chiếu đến điểm gắn kết được gọi là hệ thống trên máy được gọi là windows (và c: / được bỏ qua) và không tương đương với c: / windows / system , mô tả thư mục trên máy tính hiện tại. Lệnh nối tập tin nên được sử dụng để nối các thành phần đường dẫn.

Windows NT

Khi cố gắng thực hiện một ứng dụng, trước tiên, exec tìm kiếm tên như được chỉ định. Sau đó, theo thứ tự, .com , .exe.bat được nối vào cuối tên được chỉ định và nó tìm kiếm tên dài hơn. Nếu tên thư mục không được chỉ định như là một phần của tên ứng dụng, các thư mục sau sẽ tự động được tìm kiếm theo thứ tự khi tìm cách xác định ứng dụng:

Thư mục mà tệp thực thi Tcl đã được tải.
Thư mục hiện tại.
Thư mục hệ thống 32-bit Windows NT.
Thư mục hệ thống Windows NT 16 bit.
Thư mục chính của Windows NT.
Các thư mục được liệt kê trong đường dẫn.

Để thực thi các lệnh nội trang shell như dircopy , người gọi phải thêm "` cmd.exe / c '' vào lệnh mong muốn.

Windows 95

Khi cố gắng thực hiện một ứng dụng, trước tiên, exec tìm kiếm tên như được chỉ định. Sau đó, theo thứ tự, .com , .exe.bat được nối vào cuối tên được chỉ định và nó tìm kiếm tên dài hơn. Nếu tên thư mục không được chỉ định như là một phần của tên ứng dụng, các thư mục sau sẽ tự động được tìm kiếm theo thứ tự khi tìm cách xác định ứng dụng:

Thư mục mà tệp thực thi Tcl đã được tải.
Thư mục hiện tại.
Thư mục hệ thống Windows 95.
Thư mục chính của Windows 95.
Các thư mục được liệt kê trong đường dẫn.

Để thực thi các lệnh nội trang hệ vỏ như dircopy , người gọi phải thêm lệnh `` command.com / c '' vào lệnh mong muốn.

Khi ứng dụng DOS 16 bit đã đọc đầu vào tiêu chuẩn từ một bàn điều khiển và sau đó thoát, tất cả các ứng dụng DOS 16-bit sau đó sẽ thấy đầu vào tiêu chuẩn như đã đóng. Các ứng dụng 32 bit không có vấn đề này và sẽ chạy đúng cách, ngay cả sau khi ứng dụng DOS 16-bit cho rằng đầu vào tiêu chuẩn đã bị đóng. Không có cách giải quyết nào cho lỗi này vào lúc này.

Chuyển hướng giữa NUL: thiết bị và ứng dụng 16 bit không phải lúc nào cũng hoạt động. Khi chuyển hướng từ NUL:, một số ứng dụng có thể bị treo, một số ứng dụng khác sẽ nhận được một luồng vô hạn `` 0x01 '' byte và một số sẽ thực sự nhận được tệp kết thúc ngay lập tức; hành vi dường như phụ thuộc vào một cái gì đó được biên dịch vào chính ứng dụng. Khi chuyển hướng lớn hơn 4K hoặc hơn đến NUL:, một số ứng dụng sẽ bị treo. Các vấn đề trên không xảy ra với các ứng dụng 32 bit.

Tất cả các ứng dụng DOS 16 bit được chạy đồng bộ. Tất cả đầu vào tiêu chuẩn từ một đường ống đến ứng dụng DOS 16 bit được thu thập vào một tệp tạm thời; đầu kia của ống phải được đóng trước khi ứng dụng DOS 16 bit bắt đầu thực hiện. Tất cả các đầu ra tiêu chuẩn hoặc lỗi từ ứng dụng DOS 16 bit đến một đường ống được thu thập thành các tệp tạm thời; ứng dụng phải chấm dứt trước khi các tệp tạm thời được chuyển hướng đến giai đoạn tiếp theo của đường ống. Điều này là do một workaround cho một lỗi Windows 95 trong việc thực hiện các đường ống, và là cách Windows 95 DOS vỏ shell xử lý chính nó.

Một số ứng dụng nhất định, chẳng hạn như command.com , không nên được thực hiện tương tác. Các ứng dụng truy cập trực tiếp vào cửa sổ giao diện điều khiển, thay vì đọc từ đầu vào chuẩn và ghi vào đầu ra tiêu chuẩn của chúng có thể bị lỗi, treo Tcl hoặc thậm chí treo hệ thống nếu cửa sổ bảng điều khiển riêng của chúng không có sẵn cho chúng.

Macintosh

Lệnh exec không được triển khai và không tồn tại trong Macintosh.

Unix

Lệnh exec có đầy đủ chức năng và hoạt động như mô tả.

Xem thêm

lỗi (n), mở (n)

Từ khóa

thực thi, đường ống, chuyển hướng, tiến trình con

Quan trọng: Sử dụng lệnh man ( % man ) để xem cách một lệnh được sử dụng trên máy tính cụ thể của bạn.