Bắt đầu ra / chuyển hướng các lệnh được xâu chuỗi bởi &&


10

Tôi có một loạt các lệnh a, b, c mà tôi đang kết hợp với && : a && b && c.

Tôi muốn bắt đầu ra của tất cả các lệnh cho cả stdout và stderr. a && b && c 2>&1 > capture_file chỉ chụp đầu ra từ lệnh c.

Câu trả lời:


10
{ 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.


Tại sao stdout đầu tiên?
TLOlchot

@TLOlchot 2>&1có 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.
yaegashi

2
@TLOlchot Trước tiên, bạn không cần phải cố gắng - bạn có thể thực hiện stderr 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.
Toby Speight

1

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.