it-swarm-vi.com

Làm thế nào để báo hiệu kết thúc đầu vào stdin

  1. Trong Bash, tôi đã học được rằng tín hiệu kết thúc có thể được thay đổi bằng tài liệu ở đây. Nhưng theo mặc định, làm thế nào tôi có thể báo hiệu kết thúc đầu vào stdin?
  2. Tôi tình cờ thấy rằng với cat và chardet, đầu vào stdin của chúng có thể được báo hiệu là đã hoàn thành bởi Ctrl + d. Nhưng tôi dường như nhớ rằng Ctrl + d và Ctrl + c tương tự như kết thúc thực thi lệnh đang chạy. Vậy tôi có sai không?
84
Tim

Ctrl+D, khi được gõ ở đầu một dòng trên thiết bị đầu cuối, biểu thị sự kết thúc của đầu vào. Đây không phải là signal theo nghĩa unix: khi một ứng dụng đang đọc từ thiết bị đầu cuối và người dùng nhấn Ctrl+D, ứng dụng được thông báo rằng đã kết thúc tập tin (giống như nếu nó đang đọc từ một tập tin và đã vượt qua byte cuối cùng).

Ctrl+C không gửi tín hiệu, SIGINT . Theo mặc định SIGINT (tín hiệu ngắt) giết chết ứng dụng nền trước, nhưng ứng dụng có thể bắt tín hiệu và phản ứng theo một cách khác (ví dụ, chính Shell bắt tín hiệu và hủy bỏ dòng bạn đã bắt đầu nhập, nhưng nó không ' Khi thoát ra, nó hiển thị một Dấu nhắc mới và chờ một dòng lệnh mới).

Bạn có thể thay đổi các ký tự được liên kết với tập tin cuối và SIGINT bằng lệnh stty , ví dụ: stty eof a sẽ tạo a ký tự cuối tệp và stty intr ^- sẽ vô hiệu hóa ký tự SIGINT. Điều này hiếm khi hữu ích.

Điểm thứ hai của bạn gộp hai thứ hoàn toàn khác nhau lại với nhau.

  • Ctrl + C gửi tín hiệu tiêu diệt đến quá trình đang chạy.
  • Ctrl + D gửi một ký tự Kết thúc truyền .

Bạn đang tìm kiếm cái sau.

23
Caleb