Bạn có thể sử dụng thủ thuật sau để trao đổi stdout và stderr. Sau đó, bạn chỉ cần sử dụng các chức năng đường ống thông thường.
( proc1 3>&1 1>&2- 2>&3- ) | proc2
Được cung cấp stdoutvà stderrcả hai chỉ đến cùng một vị trí khi bắt đầu, điều này sẽ cung cấp cho bạn những gì bạn cần.
Những gì x>ybit làm là thay đổi xử lý tệp xđể bây giờ nó gửi thông tin của nó đến nơi xử lý tệp yhiện tại. Đối với trường hợp cụ thể của chúng tôi:
3>&1tạo một tay cầm mới3 sẽ xuất ra tay cầm hiện tại1 (thiết bị xuất chuẩn gốc), chỉ để lưu nó ở đâu đó cho điểm đạn cuối cùng bên dưới.
1>&2sửa đổi tay cầm 1(stdout) để xuất ra tay cầm hiện tại2 (stderr gốc).
2>&3-sửa đổi tay cầm 2(stderr) để xuất ra tay cầm hiện tại3 (thiết bị xuất chuẩn gốc) sau đó đóng tay cầm 3(thông qua -ở cuối).
Đó thực sự là lệnh hoán đổi mà bạn thấy trong các thuật toán sắp xếp:
temp = value1;
value1 = value2;
value2 = temp;
rc, đó là một vỏ khác. Vd :proc1 |[2] proc2. Nó không đẹp sao? Không phảibashmặc dù.