Làm thế nào để cả hai hiển thị đầu ra của dòng lệnh trên bàn điều khiển và lưu đầu ra vào một tệp văn bản?


25

Làm thế nào tôi có thể chạy sudo apt-get installbằng CẢ HAI khi thấy quá trình cài đặt (trong trường hợp dài của tôi) lưu kết quả đầu ra của nó vào một tệp văn bản?


Là chỉ về apt-getphải không?
Braiam

@Braiam Tôi nghĩ rằng giải pháp tôi chấp nhận có thể được áp dụng cho tất cả các lệnh khác, bạn có nghĩ vậy không?

Câu trả lời:


17

sử dụng scriptlệnh. Nó sẽ sao chép mọi thứ đi vào màn hình trong một tập tin

script -c "sudo apt-get install things" script-file.script

scriptgửi đầu ra lệnh đến một tập tin, nhưng không hiển thị nó trên màn hình.
Aaron

2
@ BryceAtNetwork23. Bạn đã thử lệnh chưa? kịch bản không gửi đầu ra ra màn hình.
ngoại trừ

1
Tôi đã làm. Tôi chạy script -c "history" ~/hist.txtvà đầu ra cưa chỉ Script startedScript done, nhưng tôi không thấy đầu ra từ lệnh thực tế trên màn hình.
Aaron

10
@ BryceAtNetwork23 historylà một bản dựng shell, không phải là lệnh bên ngoài. Điều gì xảy ra là: 1) script bắt đầu, 2) script tìm kiếm lệnh history, không tìm thấy nó, vì vậy nó đoán nó sẽ chạy nó thông qua shell. 3) script chạy lệnh history thông qua shell 4) shell mới khởi động và thực thi lệnh nội bộ lịch sử. Vì đây là một vỏ không tương tác mới, lịch sử không có gì để nói.
xuất hiện

1
scriptcũng có thể được chạy tương tác. Chỉ cần gõ scripttại dấu nhắc lệnh. Bạn sẽ nhận được một shell mới và bất kỳ lệnh nào bạn nhập sẽ được lưu đầu ra của chúng. Nhập exitđể kết thúc shell và lưu tệp. Theo mặc định, đầu ra được gọi typescriptvà nó sẽ chứa mọi thứ hiển thị trên màn hình của bạn, cho dù bạn đã nhập nó hay đó là đầu ra của lệnh. Các historylệnh vẫn nên có sẵn trong vỏ mới là tốt.
Brian Minton

52

Bạn có thể sử dụng teelệnh để thực hiện điều này.

sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt

Nhìn vào đây để biết thêm hoặc thực hiệnman tee

Lưu ý: Như những người khác đã đề cập, 2>&1cần phải chuyển hướng STDERR sang STDOUT để bắt bất kỳ lỗi nào. Xem câu hỏi StackOverflow này để được giải thích tốt về những gì 2>&1thực sự làm.


Tôi sẽ thêm "2> & 1" trước "|"
Olivier Dulac

2
Điều này là thực tế hơn so với scriptlệnh không phải được trích dẫn. Vì vậy, những lợi thế như hoàn thành bash dễ thực hiện hơn.
Dan

2
@Dan: script không cần -c "something ...": if sau đó sẽ thả bạn vào shell và hoàn thành khi bạn thoát khỏi shell đó. Cho phép nhiều lệnh, vv Ngoài ra nó giữ nhiều "định dạng" infos, cho phép phát lại của một số thứ khác (như: màn hình rõ ràng, vv) (nhưng điều đó cũng có thể mess lên đầu ra ... YMMV)
Olivier Dulac

2
@Dan + hoạt động với các hàm, bí danh, nội trang và thậm chí các nhóm lệnh và các chuỗi con. Đây phải là câu trả lời được chấp nhận IMO.
Darkhogg

1
bạn có thể sử dụng |&thay vì 2>&1 |trong bash
jfs

15

tee sẽ làm công việc theo yêu cầu.

Để chụp đầu ra thành một tệp, sử dụng:

sudo apt-get install your_software | tee log_file.txt

Điều này sẽ chỉ nắm bắt đầu ra, nhưng không có bất kỳ thông báo lỗi. Nếu bạn cũng muốn ghi lại thông báo lỗi, hãy sửa đổi lệnh thành:

sudo apt-get install your_software 2>&1  | tee log_file.txt

Hoặc, vì bash hỗ trợ người |&vận hành , sudo apt-get install your_software |& tee log_file.txtsẽ chuyển cả thiết bị xuất chuẩnthiết bị xuất chuẩn sang tee. (Kudos cho JF Sebastian , người đề nghị điều này ở nơi khác .)
Eliah Kagan

9

Một trong những điểm hay của apt-get (và APT nói chung) là chúng lưu trữ các tệp nhật ký cho hầu hết mọi thứ, ngay cả đầu ra cuối của bất kỳ lệnh nào bạn chạy trong máng, trong /var/log/apt. Ví dụ: đây là mục cuối cùng trong /var/log/apt/term.log:

Log started: 2014-06-20  16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20  16:46:33

Bây giờ, so sánh với đầu ra thực tế:

➜  ~  sudo apt-get remove xdotool 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
  xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...

Nó đã lưu cho tôi một số dòng không liên quan trong hầu hết các trường hợp và nó tự động. Vì vậy, bạn không cần thêm bất kỳ lệnh nào để làm những gì bạn muốn làm, apt-get thực hiện nó cho bạn.


1

thử lệnh tee . Bạn có thể tìm thấy ở đây một số ví dụ.

Cách sử dụng đơn giản:

  <command> | tee file

thí dụ:

  sudo apt-get install whatYouWant | tee outputFile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.