Câu trả lời:
{ a && b && c; } >capture_file 2>&1
Lưu ý thứ tự chuyển hướng: trước tiên bạn phải chuyển hướng thiết bị xuất chuẩn.
2>&1
có nghĩa là sao chép đích của thiết bị xuất chuẩn (1) thành thiết bị xuất chuẩn (2), vì vậy sẽ vô ích trừ khi bạn thiết lập chuyển hướng xuất chuẩn trước.
2>capture_file >&2
(nhưng không, vì đó không phải là thành ngữ). Điều quan trọng là bạn chuyển hướng một trong số chúng để gửi trước khi sao chép luồng đó sang luồng khác.
Ngoài việc sử dụng nhóm lệnh, {}
bạn cũng có thể chạy các lệnh trong một khung con và bắt đầu ra (và / hoặc lỗi) cùng một lúc:
( a && b && c ) >file.txt 2>&1
Thí dụ :
$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1
$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
Command 'echo' from package 'coreutils' (main)
echos: command not found