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.
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 và 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.
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
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
|& tee ~/outputfile.txt
sau mỗi commnd
.script
lệnh đã được hưởng lợi (hoặc bất lợi) nạp đạn. ~/.bashrc
khi nó bắt đầu.script
lệnh cho chỉ huy nhắc ($PS1
) theo lệnh(s), bạn bước vào.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.log
và some_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