Không có nghĩa là gì </ dev / null.


16

Tôi hiểu > /dev/nullchuyển hướng những thứ /dev/nullhoạt động như một lỗ đen. Tuy nhiên, tôi không hiểu ý < /dev/nullnghĩa của nó. Tôi thấy một số kịch bản được viết như thế này:

nohup myprogram > foo.out 2> foo.err < /dev/null &

Vì vậy, những gì < /dev/nulltrong mã trên có nghĩa là gì?

đây là một ví dụ nơi nó được đề xuất


Bản sao có thể có của các toán tử điều khiển và chuyển hướng của shell là gì?   Ngoài ra, đáng ngờ tương tự như Làm gì <&-?
G-Man nói 'Phục hồi Monica'

Câu trả lời:


19

Nó đảm bảo rằng tất cả các luồng I / O được tính toán / chiếm dụng.

Bằng cách này, quy trình nền không có gì "gắn" với thiết bị đầu cuối để bạn có thể đi về doanh nghiệp của mình mà không cần chương trình của bạn cố đọc từ TTY, điều này sẽ khiến thiết bị bị treo.

Trong trường hợp này, vì bạn đang khởi chạy tiến trình qua ssh từ tập lệnh shell, nên đảm bảo rằng tập lệnh có thể di chuyển không bị cản trở.


Có phải nó giả định chương trình của tôi mất một số đầu vào, nhưng trong trường hợp này, nó cung cấp cho chương trình của tôi không có gì là đầu vào?
Qian Chen

Cảm ơn. Tôi hiểu tất cả phần còn lại ngoại trừ < /dev/null.
Qian Chen

Vì vậy, sự khác biệt giữa mã và cùng một mã mà không có < /dev/null?
Qian Chen

Tôi thực sự đã đọc mã từ đây: stackoverflow.com/questions/29142/ từ
Qian Chen

2
rất vui vì nó đã giúp xin lỗi về sự chạy trốn; bối cảnh đã giúp mặc dù, cảm ơn! - lưu ý bên lề: tôi sẽ xóa một loạt các bình luận của mình trong một hoặc hai phút, bây giờ mọi thứ đã bị đóng đinh, nó trông có vẻ khó hiểu cho bất kỳ ai khác nhìn thấy nó
user3276552

12

program </dev/nullcó nghĩa programlà việc lấy tham số đầu vào của nó (có thể là tham số đầu vào cho một tùy chọn hoặc có thể là tệp đầu vào để hoạt động) thông qua mô tả tệp 0 tức là STDIN, từ tệp /dev/null.

Như bạn đã biết, /dev/nullkhông chứa gì, nó sẽ thông báo cho EOF (End of File) khi đọc để bất kỳ chương trình nào lấy đầu vào từ /dev/nullcơ bản sẽ chuyển hướng không có gì làm đối số đầu vào của nó.


Vì vậy, có sự khác biệt để chỉ < /dev/nullra ngoài? Chỉ cần viết nó lànohup myprogram > foo.out 2> foo.err &
Qian Chen

1
@ElgsQianChen Điều đó phụ thuộc vào program.. bạn muốn làm gì với tư cách là STDIN? Một số chương trình có thể bắt buộc vì vậy bạn cần đặt một cái gì đó là STDIN, đây có thể là trường hợp bạn vừa sử dụng /dev/nullnhư STDIN và để chương trình xử lý và đưa STDOUT và STDERR vào các tệp được đề cập ..
heemayl

Vì vậy, nó có hiệu quả ngăn chặn bất kỳ đầu vào nào chặn quá trình, và chỉ cung cấp không có gì cho bất kỳ yêu cầu đầu vào?
Qian Chen

1
@ElgsQianChen Nó sẽ chặn bộ mô tả tệp 0 tức là STDIN để bạn không thể chuyển thêm bất kỳ đầu vào nào qua đó..nếu không có cấu hình FD nào khác để nhận đầu vào từ bạn sẽ không thể cung cấp thêm bất kỳ đầu vào nào cho chương trình ..
heemayl
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.