Réponses:
utilisez la scriptcommande. Il copiera tout ce qui va à l'écran dans un fichier
script -c "sudo apt-get install things" script-file.script
scriptenvoie la sortie de la commande dans un fichier, mais ne l'affiche pas à l'écran.
script -c "history" ~/hist.txtet j'ai vu la sortie indiquant Script startedet Script done, mais je n'ai pas vu la sortie de la commande réelle sur l'écran.
historyest un shell intégré, pas une commande externe. Ce qui se passe est: 1) le script démarre, 2) le script recherche la commande d'historique, ne la trouve pas, il suppose donc qu'il devrait l'exécuter via un shell. 3) le script exécute la commande history via un shell 4) un nouveau shell démarre et exécute la commande interne historique. Puisqu'il s'agit d'un nouveau shell non interactif, l'histoire n'a rien à dire.
scriptpeut également être exécuté de manière interactive. Tapez simplement scriptà l'invite de commande. Vous obtiendrez un nouveau shell, et toutes les commandes que vous tapez auront leur sortie enregistrée. Tapez exitpour terminer le shell et enregistrez le fichier. Par défaut, la sortie est appelée typescriptet elle contiendra tout ce qui apparaît sur votre écran, que vous l'ayez tapé ou que ce soit la sortie d'une commande. La historycommande devrait également être disponible dans le nouveau shell.
Vous pouvez utiliser le tee commande pour accomplir cela.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Regardez ici pour plus d'informations ou exécutezman tee
Remarque: Comme d'autres l'ont mentionné, il 2>&1est nécessaire de rediriger STDERR vers STDOUT pour détecter les erreurs. Voir cette question StackOverflow pour une bonne explication de ce qui 2>&1se passe réellement.
scriptpuisque la commande n'a pas besoin d'être citée. Il est donc plus facile d'accomplir des avantages comme l'achèvement de bash.
-c "something ...": if vous déposera alors dans un shell, et se terminera lorsque vous quitterez ce shell. Permet plusieurs commandes, etc. De plus, il conserve plus d'informations sur le "formatage", permettant la relecture de plus de choses (comme: écran clair, etc.) (mais cela peut aussi gâcher la sortie ... ymmv)
|&au lieu de 2>&1 |dans bash
tee fera le travail au besoin.
Pour capturer la sortie dans un fichier, utilisez:
sudo apt-get install your_software | tee log_file.txt
Cela ne capturera que la sortie, mais pas les messages d'erreur. Si vous souhaitez également enregistrer des messages d'erreur, modifiez la commande pour qu'elle soit:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash prend en charge l' |&opérateur , sudo apt-get install your_software |& tee log_file.txtdirigera à la fois stdout et stderr vers tee. (Félicitations à JF Sebastian qui a suggéré cela ailleurs .)
L'un des avantages d'apt-get (et d'APT en général) est qu'ils stockent des fichiers journaux pour presque tout, même la sortie du terminal de toute commande que vous exécutez, dans le /var/log/apt. Par exemple, c'est la dernière entrée de mon /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
Maintenant, en comparant avec la sortie réelle:
➜ ~ 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) ...
Cela m'a sauvé plusieurs lignes qui ne sont pas pertinentes dans la plupart des cas, et cela se fait automatiquement. Donc, vous n'avez besoin d'aucune commande supplémentaire pour faire ce que vous voulez faire, apt-get le fait pour vous.
apt-getjuste?