Làm cách nào để kết hợp stdout và stderr cho các shell khác nhau?


18

Tôi biết câu trả lời cho một số shell, ví dụ với cmd.exebạn có thể:

some.exe > out.txt 2>&1

Làm thế nào để bạn đạt được điều tương tự cho các shell khác (bash, ksh, tcsh, powershell, v.v.)?

Câu trả lời:


16

Vỏ cá

Để chuyển hướng cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn sang tệp allDefput.txt, bạn có thể viết:

echo Hello > all_output.txt ^&1

3
nếu đường ống đầu ra tới lệnh tiếp theo, sử dụng 2> | thay vào đó: echo Xin chào 2> | ít hơn
Jeffrey04

Cú pháp đường ống có thể đã thay đổi. Vỏ cá của tôi sử dụng cùng một cú pháp "^ & 1" cho cả hai.
Keith Bentrup

2>&1cũng hoạt động - ^về cơ bản là tốc ký của cá >2. Lưu ý rằng 2>| lesshoặc ^| lessbằng chính ống chỉ stderr; để dẫn đường cho cả chúng ta và sai lầm, hãy làm^&1 | less
Beni Cherniavsky-Paskin

Cú pháp tốc ký để chuyển hướng / đường ống cả lỗi lẫn lỗi vẫn đang được thảo luận github.com/fish-shell/fish-shell/issues/110
Beni Cherniavsky-Paskin

5

Đối với csh và tcsh

some.exec >& out.txt

đối với tcsh, bạn cũng cósome.exec |& less
Boatcoder

2

Trong Powershell, nó hoàn toàn giống nhau:

2> & 1 Không gửi lỗi đến quy trình nhận, không có quyền 2> & 1
          dòng đầu ra thành công.

(từ about_Redirection).

Trong bashvà ksh ít nhất tôi cũng biết nó hoạt động theo cách này.

Nó dường như là một quy ước chung.

Một cách nhanh chóng để tìm hiểu về nó là bằng cách mở trang man của shell và thực hiện tìm kiếm &1(với /và sau đó gõ &1). Điều này hiếm khi xảy ra trong các bối cảnh khác.


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.