việc sử dụng </ dev / null & trong dòng lệnh


12

Tôi đã cố chạy một chương trình java mẫu bằng cách sử dụng dòng lệnh sau. Tuy nhiên, tôi không biết phần dấu < /dev/null &được sử dụng để làm gì?

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &

Câu trả lời:


21

< /dev/nullđược sử dụng để gửi EOF ngay lập tức đến chương trình, do đó nó không đợi đầu vào ( /dev/null, thiết bị null, là một tệp đặc biệt loại bỏ tất cả dữ liệu được ghi vào nó, nhưng báo cáo rằng thao tác ghi đã thành công và không cung cấp dữ liệu cho bất kỳ quá trình nào đọc từ nó, mang lại EOF ngay lập tức). &là một loại dấu tách lệnh đặc biệt được sử dụng để làm nền cho quá trình trước đó.

Không biết chương trình đang được gọi, tôi không trực tiếp biết tại sao cần phải chạy chương trình theo cách này.


6

</dev/nullngắt kết nối đầu vào của chương trình khỏi thiết bị đầu cuối. Một số chương trình phản ứng khác nhau tùy thuộc vào đầu vào tiêu chuẩn của chúng được kết nối với. Với tính năng chuyển hướng </dev/null, chương trình có thể cho biết rằng đầu vào của nó không đến từ một thiết bị đầu cuối và sẽ nhận được một dấu hiệu kết thúc tập tin ngay lập tức nếu nó cố đọc từ đầu vào tiêu chuẩn của nó.

Sự đơn độc &ở cuối khiến chương trình được thực thi trong nền. Điều này có nghĩa là bạn nhận được một dấu nhắc shell ngay lập tức. Nếu không có &, bạn sẽ chỉ nhận được một dấu nhắc shell khi chương trình kết thúc thực thi.

Lưu ý rằng độc lập &không liên quan đến >&. >&là một toán tử chuyển hướng (trong tcsh, bash và zsh) để chuyển hướng cả đầu ra tiêu chuẩn của chương trình và lỗi tiêu chuẩn của chương trình sang tên tệp được chỉ định sau toán tử (ở đây log).

Nói cách khác, shell sẽ làm gì khi nhìn thấy dòng lệnh này là:

  • Bắt đầu một quá trình trong nền. Trong quá trình nền:
    • Kết nối đầu vào tiêu chuẩn với /dev/null( thiết bị null ).
    • Kết nối cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn với tệp được gọi log(tạo tệp nếu nó chưa tồn tại và cắt bớt nó nếu nó tồn tại).
    • Tìm kiếm một tập tin thực thi được gọi javatrong $PATH.
    • Thực hiện tập tin đó với 5 đối số -cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.
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.