W jaki sposób można uruchomić sudo apt-get install
przez OBU widząc proces instalacji (długo w moim przypadku) i zapisywanie jego wyjście do pliku tekstowego?
25
W jaki sposób można uruchomić sudo apt-get install
przez OBU widząc proces instalacji (długo w moim przypadku) i zapisywanie jego wyjście do pliku tekstowego?
apt-get
rację?Odpowiedzi:
użyj
script
polecenia. Skopiuje wszystko, co przechodzi do ekranu w plikuźródło
script
wysyła dane wyjściowe polecenia do pliku, ale nie wyświetla go na ekranie.script -c "history" ~/hist.txt
i zobaczyłem dane wyjściowe wskazująceScript started
iScript done
, ale nie widziałem danych wyjściowych z rzeczywistego polecenia na ekranie.history
jest 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 poleceniehistory
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.script
może być również uruchamiany interaktywnie. Wystarczy wpisaćscript
w wierszu polecenia. Otrzymasz nową powłokę, a wszelkie wpisywane polecenia będą zapisywane. Wpisz,exit
aby zakończyć powłokę i zapisać plik. Domyślnie wyjście jest wywoływanetypescript
i będzie zawierało wszystko, co pokazano na ekranie, bez względu na to, czy zostało wpisane, czy było wyjściem polecenia.history
Polecenie powinno być nadal dostępne w nowej powłoce, jak również.Aby to zrobić, możesz użyć
tee
polecenia.Zajrzyj tutaj, aby uzyskać więcej informacji lub wykonaj
man tee
Uwaga: Jak wspomnieli inni,
2>&1
konieczne jest przekierowanie STDERR do STDOUT, aby złapać wszelkie błędy. Zobacz to pytanie StackOverflow, aby uzyskać dobre wyjaśnienie tego, co2>&1
faktycznie robi.źródło
script
ponieważ 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)|&
zamiast2>&1 |
w bashtee
wykona zadanie zgodnie z wymaganiami.Aby przechwycić dane wyjściowe do pliku, użyj:
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:
źródło
bash
obsługuje|&
operatora , potokujesudo apt-get install your_software |& tee log_file.txt
zarówno stdout, jak i stderr dotee
. (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
:Teraz, porównując z rzeczywistą wydajnością:
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.
źródło
spróbuj wykonać polecenie tee . Możesz znaleźć tutaj kilka przykładów.
Proste użycie:
przykład:
źródło