Câu trả lời:
sử dụng script
lệ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
script
gử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.
script -c "history" ~/hist.txt
và đầu ra cưa chỉ Script started
và Script done
, nhưng tôi không thấy đầu ra từ lệnh thực tế trên màn hình.
history
là 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.
script
cũng có thể được chạy tương tác. Chỉ cần gõ script
tạ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 typescript
và 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 history
lệnh vẫn nên có sẵn trong vỏ mới là tốt.
Bạn có thể sử dụng tee
lệ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>&1
cầ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>&1
thực sự làm.
script
lệ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.
-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)
|&
thay vì 2>&1 |
trong bash
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
bash
hỗ trợ người |&
vận hành , sudo apt-get install your_software |& tee log_file.txt
sẽ chuyển cả thiết bị xuất chuẩn và thiết bị xuất chuẩn sang tee
. (Kudos cho JF Sebastian , người đề nghị điều này ở nơi khác .)
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.
apt-get
phải không?