Tôi đang chơi với chuyển hướng shell i/o. Các lệnh Tôi đã thử (trong bash):Chuyển hướng vỏ i/o order
ls -al *.xyz 2>&1 1> files.lst
và
ls -al *.xyz 1> files.lst 2>&1
Không có *.xyz
tập tin bất kỳ trong thư mục hiện hành.
Các lệnh này mang lại cho tôi các kết quả khác nhau. Lệnh đầu tiên hiển thị thông báo lỗi ls: *.xyz: No such file or directory
trên màn hình. Nhưng cái thứ hai in thông báo lỗi này vào tập tin. Tại sao lệnh đầu tiên thất bại trong việc viết đầu ra lỗi cho tệp?
Giá trị mặc định không theo mặc định là tty. Nó đơn giản được thừa hưởng từ trình bao. Nếu shell là tương tác và chạy trên một tty, sau đó stdout và stderr mặc định cho tty đó. Nếu vỏ không chạy trên một tty, sau đó họ không. Tôi nhận ra điều này có vẻ giống như một nit, nhưng điều quan trọng là không làm xáo trộn stdout với một thiết bị đầu cuối, và mọi người mắc lỗi đó rất thường xuyên. –
Có nghĩa là trong ngữ cảnh của một trình bao tương tác vì OP đang chạy lệnh này trong một trình bao tương tác. – anubhava