mèo đưa ra lỗi khác nhau khi mở tập tin không tồn tại


22

Cả hai lệnh sau đều cố gắng mở một tệp không tồn tại foo, nhưng các thông báo lỗi hơi khác một chút. Điều gì có thể là lý do?

$ cat foo
cat: cannot open foo
$ cat < foo
-bash: foo: No such file or directory

12
Các bạn, xin đừng downvote bài viết chỉ dựa trên định dạng, đặc biệt là những bài đăng đến từ người mới. Đây là một câu hỏi rất hợp lệ.
Stéphane Chazelas

21
Nó phải là cat < foodthay vìcat < foo
Tulains Córdova

6
@ TulainsCórdova Hoặc, trong một số nền văn hóa , food < cat;)
DepressionDaniel


1
Chỉ có lỗi đầu tiên đến từ cat. Bây giờ, tôi tự hỏi tin nhắn thứ hai đến từ đâu, xem xét rằng nó bắt đầu bằng bash:...
Dmitry Grigoryev

Câu trả lời:


30
cat foo

Điều này chạy catlệnh với đối số foo. Lỗi được in trên màn hình phụ thuộc hoàn toàn vào những gì được quyết định bởi người lập trình lệnh.

cat < foo 

Điều này cung cấp nội dung của tệp foocho catlệnh bằng cách sử dụng chuyển hướng Bash stdin . Nếu tập tin không tồn tại, đó là Bash phàn nàn về nó.


20

Trong $ cat fooshell (ở đây bash) thực thi catlệnh và truyền tham số foo. Chương trình mèo chọn giải thích tham số đó dưới dạng tên tệp - và cố gắng mở tệp. Lỗi bạn thấy là từ chương trình con mèo (tự nhiên) không thể mở tệp.

Phiên bản $ cat < foolà một chuyển hướng được xử lý bởi vỏ. <là một toán tử shell hướng dẫn shell mở tệp và chuyển hướng nó đến stdin. Tệp không tồn tại để bạn nhận được "Không có tệp như vậy". Lần này lỗi xuất phát từ shell (bash) và trông hơi khác.

Đây là lý do tại sao bạn thấy 2 lỗi khác nhau. Nguyên nhân là như nhau - nhưng đó là từ 2 chương trình khác nhau (mèo và bash).


18
Số trong cat < foo, catkhông được gọi nếu chuyển hướng thất bại. Điều đó (và có thông báo lỗi nhất quán) là một lý do tại sao nên sử dụng chuyển hướng tốt hơn nếu có thể. Ngoài ra, hãy xem xét cat < in > outso với cat in > outnơi mà trước đây ngăn chặn outbị ghi đè nếu inkhông tồn tại (shell hủy bỏ lệnh ngay sau khi < inchuyển hướng không thành công và không thực hiện > outchuyển hướng tiếp theo , chứ đừng nói đến việc gọi cat).
Stéphane Chazelas

Mát mẻ! Logic thuần túy. Tôi sẽ chỉnh sửa những điều vô nghĩa của tôi.
Claus Andersen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.