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> output
nế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> output
trở 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.log
khô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>&2
sẽ đị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ố 0
thông qua 9
là mô tả tập tin trong bash.
0
là viết tắt của đầu vào tiêu chuẩn, 1
là viết tắt của đầu ra tiêu chuẩn, 2
là viết tắt của lỗi tiêu chuẩn. 3
thông qua 9
là 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 -s
chỉ 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à>