Tại sao lệnh Linux không nói gì khi chạy?

Tác giả ChatGPT, T.Mười 03, 2024, 06:41:21 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Sự im lặng không phải là điều đáng sợ.

  • Việc thiếu đầu ra thiết bị đầu cuối từ một số lệnh Linux thành công bắt nguồn từ lựa chọn thiết kế mang tính lịch sử.
  • Các chương trình yên tĩnh cho phép xây dựng các đường ống dễ dàng tại shell và tiếp tục ảnh hưởng đến sự phát triển của Linux, có từ thời Triết lý Unix.
  • Kiểm tra sự thành công của lệnh bằng cách kiểm tra trạng thái thoát, trong đó 0 biểu thị thành công và các số khác biểu thị lỗi.


Khi bạn mới bắt đầu sử dụng Linux, bạn thường thấy mình đang sử dụng dòng lệnh. Bạn nhập lệnh, đợi đầu ra, rồi—không có gì cả. Chỉ có con trỏ nhấp nháy, chờ đầu vào của bạn. Chuyện gì đang xảy ra vậy? Đây là lý do tại sao rất nhiều lệnh Linux không nói gì khi chúng chạy thành công.

1. Tại sao không có đầu ra thiết bị đầu cuối?

Ví dụ, bạn có thể chạy lệnh ls trong một thư mục không có bất kỳ tệp nào. Bạn sẽ chỉ nhận được dấu nhắc mà không cần in bất kỳ thông tin gì vào terminal.


Lý do chính khiến nhiều lệnh đầu cuối không in ra bất cứ thứ gì khi chúng thành công là vì đây là lỗi còn sót lại từ thời Unix.

Nhiều hệ thống Unix chạy trên Teletype, chạy rất chậm. Việc in khi một thao tác thành công chỉ lãng phí thời gian và giấy.

Đây là video cho phép bạn nhìn thấy và nghe một chiếc đang hoạt động.

2. Các lập trình viên thích các chương trình yên tĩnh để xây dựng các đường ống

Việc có các chương trình không có đầu ra theo mặc định cũng giúp xây dựng các chương trình thành các đường ống. Đây là một yếu tố chính của "Triết lý Unix" vẫn ảnh hưởng đến nhiều sự phát triển của Linux ngày nay.

Cách truyền thống để thiết kế các chương trình dòng lệnh trong các hệ thống giống Unix là nối đầu ra với đầu vào của một chương trình khác, đôi khi là nhiều chương trình, được gọi là đường ống, từ toán tử |. Theo cách suy nghĩ này, nếu ls đưa ra thứ gì đó như "0 tệp được tìm thấy" thì các chương trình khác sẽ phải xử lý nó. Không có tệp là thông tin vô dụng đối với các lệnh xa hơn trong đường ống.

Ví dụ, bạn có thể chuyển lệnh ls tới wc :

Mã nguồn [Chọn]
ls | wc
Nếu không có bất kỳ tập tin nào từ ls, wc sẽ hiển thị số ký tự là 0.


Như Eric S. Raymond đã viết trong "Nghệ thuật lập trình Unix", "Các chương trình lộn xộn thường không tương thích với các chương trình khác".

3. Cách kiểm tra trạng thái thoát để xem hoạt động có thành công hay không

Các chương trình Linux thường sẽ in thông báo lỗi chuẩn nếu có sự cố. Thông thường, lỗi chuẩn sẽ được chuyển đến thiết bị đầu cuối, mặc dù nó có thể được chuyển hướng đến một tệp khác.

Một chương trình dòng lệnh đặt một biến gọi là trạng thái thoát khi nó chạy xong. Trạng thái thoát bằng 0 biểu thị thành công, trong khi bất kỳ số nào khác biểu thị lỗi. Bạn có thể kiểm tra trạng thái thoát của lệnh chạy cuối cùng bằng biến $?:

Mã nguồn [Chọn]
echo $?
Nhiều shell có thể được cấu hình để hiển thị lỗi tại dấu nhắc nếu lệnh cuối cùng kết thúc với trạng thái thoát khác không. Sau đây là ví dụ với tiện ích mở rộng Oh My Zsh cho zsh, trong đó dấu nhắc chuyển sang màu đỏ để chỉ ra lỗi.

Các lệnh có thể mất nhiều thời gian, chẳng hạn như cập nhật các gói của bạn, thường sẽ tạo ra nhiều kết quả hơn.

Các chương trình Linux đã kế thừa phong cách tối giản của Unix và điều đó bao gồm cả đầu ra của chúng. Bây giờ bạn biết lý do tại sao đôi khi bạn chỉ nhận được một dấu nhắc trống khi bạn chạy một số lệnh Linux trong thiết bị đầu cuối. Trong Linux, đầu ra tốt nhất đôi khi có thể là không có gì cả.