Risposte:
usa il scriptcomando Copia tutto ciò che va sullo schermo in un file
script -c "sudo apt-get install things" script-file.script
scriptinvia l'output del comando a un file, ma non lo mostra sullo schermo.
script -c "history" ~/hist.txte ho visto l'output che indica Script startede Script done, ma non ho visto l'output del comando effettivo sullo schermo.
historyè una shell incorporata, non un comando esterno. Quello che succede è: 1) lo script viene avviato, 2) lo script cerca il comando history, non lo trova, quindi suppone che dovrebbe essere eseguito tramite una shell. 3) lo script esegue il comando history tramite una shell 4) avvia una nuova shell ed esegue il comando interno della cronologia. Poiché si tratta di una nuova shell non interattiva, la storia non ha nulla da dire.
scriptpuò anche essere eseguito in modo interattivo. Basta digitare scriptal prompt dei comandi. Otterrai una nuova shell e tutti i comandi digitati avranno il loro output salvato. Digitare exitper terminare la shell e salvare il file. Per impostazione predefinita, l'output viene chiamato typescripte conterrà tutto ciò che viene visualizzato sullo schermo, sia che sia stato digitato, sia che fosse l'output di un comando. Il historycomando dovrebbe essere ancora disponibile anche nella nuova shell.
È possibile utilizzare il teecomando per eseguire ciò.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Cerca qui per maggiori informazioni o eseguiman tee
Nota: come altri hanno già detto, 2>&1è necessario reindirizzare STDERR a STDOUT per rilevare eventuali errori. Vedi questa domanda StackOverflow per una buona spiegazione di ciò che 2>&1effettivamente fa.
scriptquando il comando non deve essere citato. Quindi vantaggi come il completamento della bash sono più facili da realizzare.
-c "something ...": se poi ti lascerà su una shell e finirà quando esci da quella shell. Consente più comandi, ecc. Inoltre mantiene più informazioni di "formattazione", consentendo la riproduzione di alcune altre cose (come: cancella schermo, ecc.) (Ma che può anche rovinare l'output ... ymmv)
|&posto di 2>&1 |bash
tee farà il lavoro come richiesto.
Per acquisire l'output in un file, utilizzare:
sudo apt-get install your_software | tee log_file.txt
Questo acquisirà solo l'output, ma non eventuali messaggi di errore. Se si desidera anche registrare messaggi di errore, modificare il comando in modo che sia:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash supporti l' |&operatore , sudo apt-get install your_software |& tee log_file.txttubo di volontà sia stdout e stderr a tee. (Complimenti a JF Sebastian che lo ha suggerito altrove .)
Una delle bellezze di apt-get (e APT in generale) è che memorizzano i file di registro per quasi tutto, anche l'output del terminale di qualsiasi comando che si esegue, attraverso /var/log/apt. Ad esempio, questa è l'ultima voce nel mio /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
Ora, confrontando con l'output effettivo:
➜ ~ 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) ...
Mi ha salvato diverse righe che non sono rilevanti nella maggior parte dei casi, e lo fa automaticamente. Quindi, non hai bisogno di alcun comando aggiuntivo per fare quello che vuoi fare, apt-get lo fa per te.
apt-getgiusto?