Tôi biết điều này nhiều:
$ command 2>> error
$ command 1>> output
Có cách nào để tôi có thể xuất stderr sang tệp lỗi và xuất chuẩn cho tệp đầu ra trong cùng một dòng bash không?
Tôi biết điều này nhiều:
$ command 2>> error
$ command 1>> output
Có cách nào để tôi có thể xuất stderr sang tệp lỗi và xuất chuẩn cho tệp đầu ra trong cùng một dòng bash không?
Câu trả lời:
Chỉ cần thêm chúng trong một dòng command 2>> error 1>> output
Tuy nhiên, lưu ý rằng >>là để nối thêm nếu tệp đã có dữ liệu. Trong khi đó, >sẽ ghi đè lên bất kỳ dữ liệu hiện có trong tệp.
Vì vậy, command 2> error 1> outputnếu bạn không muốn nối thêm.
Chỉ để hoàn thành, bạn có thể viết 1>như >mô tả tệp mặc định là đầu ra. vì vậy 1>và >là điều tương tự
Vì vậy, command 2> error 1> outputtrở thành,command 2> error > output
command &2>err.log, tôi nghĩ rằng tôi hoàn toàn khó hiểu sintaxies. (Một liên kết đến một câu trả lời thích hợp của tất cả các bash pipe-isms có thể theo thứ tự)
command &2>err.logkhông hoàn toàn hợp pháp - dấu và trong cú pháp đó được sử dụng cho bộ mô tả tệp làm mục tiêu, ví dụ: command 1>&2sẽ định tuyến lại thiết bị xuất chuẩn đến thiết bị lỗi chuẩn.
Thử cái này:
your_command 2>stderr.log 1>stdout.log
Các chữ số 0thông qua 9là mô tả tập tin trong bash.
0là viết tắt của đầu vào tiêu chuẩn, 1là viết tắt của đầu ra tiêu chuẩn, 2là viết tắt của lỗi tiêu chuẩn. 3thông qua 9là phụ tùng cho bất kỳ việc sử dụng tạm thời khác.
Bất kỳ bộ mô tả tệp nào cũng có thể được chuyển hướng đến một tệp hoặc tới một bộ mô tả tệp khác bằng toán tử >. Thay vào đó, bạn có thể sử dụng toán tử >>để nối vào một tệp thay vì tạo một tệp trống.
Sử dụng:
file_descriptor > filename
file_descriptor > &file_descriptor
Vui lòng tham khảo chi tiết Bash-Scripting Guide: Chương 20. I / O Redirection .
Hoặc nếu bạn muốn trộn các kết quả đầu ra (stdout & stderr) trong một tệp duy nhất bạn có thể muốn sử dụng:
command > merged-output.txt 2>&1
Đầu ra của nhiều lệnh có thể được chuyển hướng. Điều này hoạt động cho cả dòng lệnh hoặc hữu ích nhất trong tập lệnh bash. Các -schỉ dẫn nhắc mật khẩu đến màn hình.
Hereblock cmds stdout / stderr được gửi đến các tệp riêng biệt và không có gì để hiển thị.
sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF
Hereblock cmds stdout / stderr được gửi đến một tệp duy nhất và hiển thị.
sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF
Hereblock cmds stdout / stderr được gửi đến các tệp riêng biệt và thiết bị xuất chuẩn để hiển thị.
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
Tùy thuộc vào bạn là ai (whoami) và tên người dùng, mật khẩu có thể được yêu cầu hoặc không.
1>có thể được viết là>