Mặc dù câu trả lời được chấp nhận cho câu hỏi này là chính xác, nhưng thực sự không có gì nhiều để giải thích tại sao nó hoạt động và vì cú pháp không rõ ràng ngay lập tức nên tôi đã tìm một cách nhanh chóng để tìm hiểu điều gì đang thực sự xảy ra. Với hy vọng thông tin này hữu ích cho người khác, tôi sẽ đăng nó ở đây.
Chuyển hướng thông báo lỗi từ Dấu nhắc lệnh: STDERR / STDOUT
Tóm lược
Khi chuyển hướng đầu ra từ một ứng dụng bằng biểu tượng '>', thông báo lỗi vẫn in ra màn hình. Điều này là do các thông báo lỗi thường được gửi đến luồng Lỗi tiêu chuẩn thay vì luồng Tiêu chuẩn.
Đầu ra từ một ứng dụng hoặc lệnh điều khiển (Command Prompt) thường được gửi đến hai luồng riêng biệt. Đầu ra thông thường được gửi đến Standard Out (STDOUT) và các thông báo lỗi được gửi đến Lỗi tiêu chuẩn (STDERR). Khi bạn chuyển hướng đầu ra của bàn điều khiển bằng biểu tượng ">", bạn chỉ chuyển hướng STDOUT. Để chuyển hướng STDERR, bạn phải chỉ định '2>' cho biểu tượng chuyển hướng. Điều này chọn luồng đầu ra thứ hai là STDERR.
Thí dụ
Lệnh dir file.xxx
( file.xxx
không tồn tại) sẽ hiển thị đầu ra sau:
Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not Found
Nếu bạn chuyển hướng đầu ra cho NUL
thiết bị bằng cách sử dụng dir file.xxx > nul
, bạn vẫn sẽ thấy phần thông báo lỗi của đầu ra, như sau:
File Not Found
Để chuyển hướng (chỉ) thông báo lỗi đến NUL
, sử dụng lệnh sau:
dir file.xxx 2> nul
Hoặc, bạn có thể chuyển hướng đầu ra đến một nơi và các lỗi đến một nơi khác.
dir file.xxx > output.msg 2> output.err
Bạn có thể in lỗi và đầu ra tiêu chuẩn thành một tệp bằng cách sử dụng lệnh "& 1" để chuyển hướng đầu ra cho STDERR sang STDOUT và sau đó gửi đầu ra từ STDOUT đến một tệp:
dir file.xxx 1> output.msg 2>&1