Odpowiedzi:
użyj scriptpolecenia. Skopiuje wszystko, co przechodzi do ekranu w pliku
script -c "sudo apt-get install things" script-file.script
scriptwysyła dane wyjściowe polecenia do pliku, ale nie wyświetla go na ekranie.
script -c "history" ~/hist.txti zobaczyłem dane wyjściowe wskazujące Script startedi Script done, ale nie widziałem danych wyjściowych z rzeczywistego polecenia na ekranie.
historyjest wbudowaną powłoką, a nie zewnętrznym poleceniem. Co się dzieje: 1) skrypt się uruchamia, 2) skrypt przeszukuje polecenie historii, nie znajduje go, więc zgaduje, że powinien uruchomić to za pomocą powłoki. 3) skrypt uruchamia polecenie history przez powłokę 4) uruchamia się nowa powłoka i wykonuje polecenie wewnętrzne historii. Ponieważ jest to nowa nieinteraktywna powłoka, historia nie ma nic do powiedzenia.
scriptmoże być również uruchamiany interaktywnie. Wystarczy wpisać scriptw wierszu polecenia. Otrzymasz nową powłokę, a wszelkie wpisywane polecenia będą zapisywane. Wpisz, exitaby zakończyć powłokę i zapisać plik. Domyślnie wyjście jest wywoływane typescripti będzie zawierało wszystko, co pokazano na ekranie, bez względu na to, czy zostało wpisane, czy było wyjściem polecenia. historyPolecenie powinno być nadal dostępne w nowej powłoce, jak również.
Aby to zrobić, możesz użyć teepolecenia.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Zajrzyj tutaj, aby uzyskać więcej informacji lub wykonajman tee
Uwaga: Jak wspomnieli inni, 2>&1konieczne jest przekierowanie STDERR do STDOUT, aby złapać wszelkie błędy. Zobacz to pytanie StackOverflow, aby uzyskać dobre wyjaśnienie tego, co 2>&1faktycznie robi.
scriptponieważ polecenie nie musi być cytowane. Tak więc korzyści takie jak ukończenie bashu są łatwiejsze do osiągnięcia.
-c "something ...": if następnie przeniesie Cię do powłoki i zakończy się po wyjściu z tej powłoki. Pozwala na wiele poleceń itp. Dodatkowo zachowuje więcej informacji o „formatowaniu”, pozwalając na odtworzenie kilku innych rzeczy (takich jak: czysty ekran itp.) (Ale to również może zepsuć wyjście ... ymmv)
|&zamiast 2>&1 |w bash
tee wykona zadanie zgodnie z wymaganiami.
Aby przechwycić dane wyjściowe do pliku, użyj:
sudo apt-get install your_software | tee log_file.txt
Spowoduje to tylko przechwycenie danych wyjściowych, ale nie żadnych komunikatów o błędach. Jeśli chcesz również rejestrować komunikaty o błędach, zmień polecenie na:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash obsługuje |&operatora , potokujesudo apt-get install your_software |& tee log_file.txt zarówno stdout, jak i stderr do tee. (Uznanie dla JF Sebastiana, który zasugerował to gdzie indziej )
Jedną z zalet apt-get (i ogólnie APT) jest to, że przechowują pliki dziennika dla prawie wszystkiego, nawet danych wyjściowych terminalu każdego polecenia uruchamianego przez /var/log/apt. Na przykład jest to ostatni wpis w moim /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
Teraz, porównując z rzeczywistą wydajnością:
➜ ~ 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) ...
Zaoszczędził mi kilka wierszy, które w większości przypadków nie są istotne, i robi to automatycznie. Tak więc nie potrzebujesz żadnych dodatkowych poleceń, aby robić to, co chcesz, apt-get zrobi to za Ciebie.
apt-getrację?