Nội dung có mặt như một cách để hệ thống gọi nhanh hơn. Vì vậy, tôi tin rằng read
lệnh có mặt như một nội dung để có hiệu quả hơn.
Trích dẫn từ đây ,
Các lệnh dựng sẵn này là một phần của shell và được triển khai như một phần của mã nguồn của shell. Shell nhận ra rằng lệnh mà nó được yêu cầu thực thi là một trong những nội trang của nó và nó tự thực hiện hành động đó mà không cần gọi ra một lệnh thực thi riêng. Các shell khác nhau có các nội trang khác nhau, mặc dù sẽ có rất nhiều sự chồng chéo trong bộ cơ bản.
Bây giờ, tôi muốn điều này được tự mình thử nghiệm, để bạn có thể hiểu tại sao lại read
có mặt dưới dạng vỏ.
Thông thường, bạn không thể làm strace
trên các nội trang. Tuy nhiên, có một cách giải quyết cho điều này là tốt. Điều này được giải thích khá gọn gàng trong câu trả lời này .
- Trong shell đầu tiên, chạy lệnh như
stty -echo
.
- Mở một shell khác và chạy lệnh như
cat | strace bash >
/dev/null
.
- Bây giờ, shell sẽ chờ người dùng gõ các lệnh và ở đó khi người dùng gõ các lệnh, bạn cũng có thể thấy những gì xảy ra ở cấp hệ thống.
- Khi bạn đưa ra 3 lệnh trên, bạn có thể thấy rằng đọc có ít lệnh gọi hệ thống hơn 2 lệnh còn lại. Tôi không dán đầu ra từ
strace
vì nó là khá lớn.
read
có thể phân tích các tham số được phân tách bằng dấu tách trường bên trong$IFS
.strace
Thủ thuật của @ ramesh cũng là một cách tuyệt vời để phân tích sự khác biệt.