Helpex - Trao đổi & giúp đỡ Đăng nhập
667

Tôi biết rằng trong Linux, để chuyển hướng đầu ra từ màn hình sang tệp, tôi có thể sử dụng >hoặc tee. Tuy nhiên, tôi không chắc tại sao một phần đầu ra vẫn xuất ra màn hình và không được ghi vào tệp.

Có cách nào để chuyển hướng tất cả đầu ra vào tập tin?

667 hữu ích 0 bình luận 962k xem chia sẻ
1067

Phần đó được viết cho stderr, sử dụng 2>để chuyển hướng nó. Ví dụ:

foo > stdout.txt 2> stderr.txt

hoặc nếu bạn muốn trong cùng một tệp:

foo > allout.txt 2>&1

Lưu ý: điều này hoạt động trong (ba) sh, kiểm tra shell của bạn để biết cú pháp thích hợp

1067 hữu ích 5 bình luận chia sẻ
138

Tất cả các hệ điều hành POSIX có 3 luồng : stdin, stdout và stderr. stdin là đầu vào, có thể chấp nhận thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn. stdout là sản phẩm chính, mà được chuyển hướng với >, >>hoặc |. stderr là đầu ra lỗi, được xử lý riêng để mọi trường hợp ngoại lệ không được chuyển đến một lệnh hoặc được ghi vào một tệp mà nó có thể bị hỏng; thông thường, điều này được gửi đến một bản ghi của một số loại, hoặc đổ trực tiếp, ngay cả khi thiết bị xuất chuẩn được chuyển hướng. Để chuyển hướng cả hai đến cùng một nơi, sử dụng:

command &> /some/file

EDIT : cảm ơn Zack vì đã chỉ ra rằng giải pháp trên không khả dụng - thay vào đó hãy sử dụng:

*command* > file 2>&1 

Nếu bạn muốn tắt tiếng, hãy làm:

*command* 2> /dev/null
138 hữu ích 3 bình luận chia sẻ
76

Để có được đầu ra trên bàn điều khiển VÀ trong một tập tin file.txtchẳng hạn.

make 2>&1 | tee file.txt

Lưu ý: &(in 2>&1) chỉ định rằng đó 1không phải là tên tệp mà là mô tả tệp.

76 hữu ích 1 bình luận chia sẻ
42

Dùng cái này - "require command here" > log_file_name 2>&1

Mô tả chi tiết về toán tử chuyển hướng trong Unix / Linux.

Toán tử> chuyển hướng đầu ra thường thành một tệp nhưng nó có thể là một thiết bị. Bạn cũng có thể sử dụng >> để chắp thêm.

Nếu bạn không chỉ định một số thì luồng đầu ra tiêu chuẩn được giả sử nhưng bạn cũng có thể chuyển hướng lỗi

> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file

/ dev / null là thiết bị null, nó lấy bất kỳ đầu vào nào bạn muốn và ném nó đi. Nó có thể được sử dụng để ngăn chặn bất kỳ đầu ra.

42 hữu ích 2 bình luận chia sẻ
27

Tín dụng cho osexp2003 và ja


Thay vì đặt

&>> your_file.log

đằng sau một dòng trong

crontab -e

tôi sử dụng

#!/bin/bash
exec &>> your_file.log

ở đầu tập lệnh BASH.

Ưu điểm: Bạn có các định nghĩa nhật ký trong tập lệnh của mình. Tốt cho Git, vv

27 hữu ích 2 bình luận chia sẻ
15

Nó có thể là lỗi tiêu chuẩn. Bạn có thể chuyển hướng nó:

... > out.txt 2>&1
15 hữu ích 0 bình luận chia sẻ
15

Chỉ huy:

foo >> output.txt 2>&1

nối vào tệp output.txt mà không thay thế nội dung.

15 hữu ích 1 bình luận chia sẻ
14

Bạn có thể sử dụng execlệnh để chuyển hướng tất cả đầu ra stdout / stderr của bất kỳ lệnh nào sau này.

kịch bản mẫu:

exec 2> your_file2 > your_file1
your other commands.....
14 hữu ích 0 bình luận chia sẻ
7

Sử dụng >>để chắp thêm:

command >> file

7 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ linux bash io-redirection , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading