Làm thế nào để tôi tiết kiệm ga ra một tập tin?

Làm thế nào để tôi tiết kiệm đầu ra một lệnh để một tập tin?

Có một cách mà không sử dụng bất kỳ phần mềm? Tôi muốn biết làm thế nào.

Vâng, nó là có thể, chỉ cần chuyển hướng đầu ra (AKA stdout) đến một tập tin:

SomeCommand > SomeFile.txt  

Hoặc nếu ông muốn thêm dữ liệu:

SomeCommand >> SomeFile.txt

Nếu bạn muốn stderr cũng như sử dụng này:

SomeCommand &> SomeFile.txt  

hoặc này để nối:

SomeCommand &>> SomeFile.txt  

nếu bạn muốn để có cả stderr và ra hiển thị trên bảng điều khiển trong một tập tin sử dụng này:

SomeCommand 2>&1 | tee SomeFile.txt

(Nếu bạn muốn ra chỉ, thả 2 ở trên)

Để viết ra một lệnh để một tập tin, về cơ bản có 10 thường sử dụng cách.

Tổng:

Xin lưu ý rằng những n.e. trong cú pháp cột có nghĩa là "không tồn tại".
Có một cách, nhưng nó quá phức tạp để phù hợp với vào cột. Bạn có thể tìm thấy một hữu ích liên kết trong danh Sách phần về nó.

          || visible in terminal ||   visible in file   || existing  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   ==========++==========+==========++==========+==========++===========    >     ||    no    |   yes    ||   yes    |    no    || overwrite    >>    ||    no    |   yes    ||   yes    |    no    ||  append          ||          |          ||          |          ||   2>     ||   yes    |    no    ||    no    |   yes    || overwrite   2>>    ||   yes    |    no    ||    no    |   yes    ||  append          ||          |          ||          |          ||   &>     ||    no    |    no    ||   yes    |   yes    || overwrite   &>>    ||    no    |    no    ||   yes    |   yes    ||  append          ||          |          ||          |          || | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append          ||          |          ||          |          || n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append          ||          |          ||          |          |||& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

Danh sách:

  • command > output.txt

    Chuẩn ra dòng sẽ được chuyển đến các tập tin duy nhất, nó sẽ không được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, nó được ghi đè.

  • command >> output.txt

    Chuẩn ra dòng sẽ được chuyển đến các tập tin duy nhất, nó sẽ không được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, các dữ liệu mới sẽ được thêm vào cuối của các tập tin.

  • command 2> output.txt

    Các tiêu đề dòng sẽ được chuyển đến các tập tin duy nhất, nó sẽ không được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, nó được ghi đè.

  • command 2>> output.txt

    Các tiêu đề dòng sẽ được chuyển đến các tập tin duy nhất, nó sẽ không được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, các dữ liệu mới sẽ được thêm vào cuối của các tập tin.

  • command &> output.txt

    Cả hai tiêu chuẩn ra và tiêu chuẩn lỗi dòng sẽ được chuyển đến các tập tin chỉ, không có gì sẽ được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, nó được ghi đè.

  • command &>> output.txt

    Cả hai tiêu chuẩn ra và tiêu chuẩn lỗi dòng sẽ được chuyển đến các tập tin chỉ, không có gì sẽ được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, các dữ liệu mới sẽ được thêm vào cuối của các tập tin..

  • command | tee output.txt

    Chuẩn ra dòng sẽ được sao chép đến các tập tin, nó sẽ vẫn còn được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, nó được ghi đè.

  • command | tee -a output.txt

    Chuẩn ra dòng sẽ được sao chép đến các tập tin, nó sẽ vẫn còn được nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, các dữ liệu mới sẽ được thêm vào cuối của các tập tin.

  • (*)

    Bash đã không viết tắt cú pháp cho phép đường ống chỉ có thiết bị lỗi chuẩn để một lệnh thứ hai, đó sẽ là cần thiết ở đây trong sự kết hợp với tee một lần nữa để hoàn thành bàn. Nếu bạn thực sự cần một cái gì đó như là, hãy nhìn vào "Làm thế nào để ống đầu lỗi tiêu chuẩn, và không thiết bị xuất chuẩn?"trên Đống Tràn cho một số cách làm sao điều này có thể được thực hiện như bởi trao đổi dòng suối hay sử dụng quá trình thay thế.

  • command |& tee output.txt

    Cả hai tiêu chuẩn ra và tiêu chuẩn lỗi suối sẽ được sao chép các tập tin, trong khi vẫn có thể nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, nó được ghi đè.

  • command |& tee -a output.txt

    Cả hai tiêu chuẩn ra và tiêu chuẩn lỗi suối sẽ được sao chép các tập tin, trong khi vẫn có thể nhìn thấy trong các thiết bị đầu cuối. Nếu các tập tin đã tồn tại, các dữ liệu mới sẽ được thêm vào cuối của các tập tin.

Bạn cũng có thể sử dụng tee để gửi ra một tập tin:

command | tee ~/outputfile.txt

Một chút thay đổi sẽ bắt đầu lỗi tiêu chuẩn là tốt:

command 2>&1 | tee ~/outputfile.txt

hoặc hơi ngắn hơn và ít phức tạp:

command |& tee ~/outputfile.txt

tee rất hữu ích, nếu bạn muốn để có thể bắt đầu ra lệnh trong khi cũng xem nó sống.

Bạn có thể chuyển lệnh ra một tập tin:

your_command >/path/to/file

Để gắn các đầu ra lệnh cho một tập tin thay vì ghi đè lên, nó sử dụng:

your_command >>/path/to/file

Một nâng cao để xem xét -

Kịch bản khác nhau, sẽ tiêm mã màu vào đầu ra mà bạn có thể không muốn làm lộn xộn lên nhật ký của tập tin.

Để sửa chữa đây, bạn có thể sử dụng chương trình sed để tách ra những cái mật mã đó. Ví dụ:

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt

Có hai câu hỏi khác nhau ở đây. Đầu tiên, là trong các tiêu đề:

Làm thế nào để tôi tiết kiệm ga ra một tập tin?

Câu hỏi thứ hai là trong cơ thể:

Làm thế nào để tôi tiết kiệm đầu ra một lệnh để một tập tin?

Tất cả các câu trả lời đăng ở đây địa chỉ những câu hỏi thứ hai nhưng không có địa chỉ, câu hỏi đầu tiên trong đó có một câu trả lời tuyệt vời trong Unix và Linux:

Câu trả lời này sử dụng một ít được biết đến lệnh gọi là script đó tiết kiệm tất cả các bạn của vỏ ra vào một văn bản tin cho đến khi bạn gõ exit. Đầu ra lệnh vẫn còn xuất hiện trên màn hình, nhưng cũng xuất hiện trong những văn bản tập tin.

Quá trình là đơn giản. Sử dụng:

$ script ~/outputfile.txtScript started, file is /home/rick/outputfile.txt$ command1$ command2$ command3$ exitexitScript done, file is /home/rick/outputfile.txt

Sau đó nhìn ghi nhận ra lệnh 1, 2 và 3 với:

cat ~/outputfile.txt

Đây là tương tự sớm trả lời của:

command |& tee ~/outputfile.txt
  • Nhưng, bạn không cần phải sử dụng |& tee ~/outputfile.txt sau mỗi commnd.
  • Những script lệnh đã được hưởng lợi (hoặc bất lợi) nạp đạn. ~/.bashrc khi nó bắt đầu.
  • Những script lệnh cho chỉ huy nhắc ($PS1) theo lệnh(s), bạn bước vào.
  • Những script lệnh ghi lại tất cả các chi tiết trong đầy đủ màu sắc.

Cho cron việc làm ... bạn muốn tránh Bash mở rộng. Tương đương với dụng hơn sh chuyển hướng khai thác được

Bash          POSIX------------  --------------foo &> bar    foo >bar 2>&1foo &>> bar   foo >>bar 2>&1foo |& bar    foo 2>&1 | bar

Bạn sẽ nhận thấy rằng các dụng hơn cơ sở là trong một ý nghĩa đơn giản hơn và đơn giản. Những &> cú pháp đã mượn từ csh đó nên đã thuyết phục anh rằng đó là một ý tưởng tồi.

some_command | tee command.logsome_command > command.log có vấn đề mà họ không tiết kiệm những đầu ra lệnh để những command.log tập tin trong thời gian thực.

Để tránh vấn đề đó, và tiết kiệm được lệnh ra trong thời gian thực, bạn có thể nối unbuffer đó đi kèm với những expect gói.


Ví dụ:

sudo apt-get install expectunbuffer some_command | tee command.logunbuffer some_command > command.log

Giả sử log.py chứa:

import timeprint('testing')time.sleep(100) # sleeping for 100 seconds

bạn có thể chạy unbuffer python log.py | tee command.log hay unbuffer python log.py > command.log

Thêm thông tin: Làm thế nào tôi có thể tiết kiệm một đầu ra lệnh cho một tập tin trong thời gian thực?

Nếu bạn muốn để ra với các tập tin trong khi những lệnh được chạy:

script -c ./path/to/executable.bash -f log.txt