2010-02-04 30 views
5

Tôi có một tập lệnh dơi mà tại một thời điểm chuyển hướng stderr của một quá trình để stdout, và sau đó ghi nó vào một tập tin. Tôi đã từng làm điều này như sau:Bat chuyển hướng stderr sang stdout có hành vi kỳ lạ

process.exe 2>&1 > file.txt 

Tuy nhiên, điều này không chuyển hướng tiêu bản cho tệp (vì lý do tôi không thể hiểu). Khi tôi sửa đổi dòng thành:

process.exe > file.txt 2>&1 

Toàn bộ điều hoạt động. Không phải là hai tương đương?

Trả lời

8

Ví dụ đầu tiên về cơ bản không:

stderr = stdout; 
stdout = "file.txt"; 

Vì vậy, stderr vẫn chỉ vào gốc stdout. Ví dụ thứ hai của bạn không:

stdout = "file.txt"; 
stderr = stdout; 

Vì vậy, cả hai stderrstdout tại tham khảo file.txt. Thật phiền phức.

2

Chuyển hướng 2>&1 hoạt động ở cuối dòng lệnh. Nó sẽ không hoạt động như tham số chuyển hướng đầu tiên, chuyển hướng yêu cầu tên tệp và 2>&1 ở cuối. Bạn đang cố gắng chuyển hướng stderr một cách hiệu quả nhưng không có trình giữ chỗ để lưu trữ các thông báo stderr do đó nó không thành công. Các phím tắt để ghi nhớ này là

 
executable > some_file 2>&1 

Hope this helps, Trân trọng, Tom.

1

Bằng cách này, vì lý do tôi không hoàn toàn hiểu, một suy nghĩ như

process.exe > result.txt 2<&1 

cũng dường như làm việc

Các vấn đề liên quan