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 stdout
và stderr
cả 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>y
bit 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 y
hiện tại. Đối với trường hợp cụ thể của chúng tôi:
3>&1
tạ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>&2
sử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ảibash
mặc dù.