Réponses:
utilisez la script
commande. Il copiera tout ce qui va à l'écran dans un fichier
script -c "sudo apt-get install things" script-file.script
script
envoie la sortie de la commande dans un fichier, mais ne l'affiche pas à l'écran.
script -c "history" ~/hist.txt
et j'ai vu la sortie indiquant Script started
et Script done
, mais je n'ai pas vu la sortie de la commande réelle sur l'écran.
history
est 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.
script
peut é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 exit
pour terminer le shell et enregistrez le fichier. Par défaut, la sortie est appelée typescript
et 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 history
commande 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>&1
est nécessaire de rediriger STDERR vers STDOUT pour détecter les erreurs. Voir cette question StackOverflow pour une bonne explication de ce qui 2>&1
se passe réellement.
script
puisque 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.txt
dirigera à 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-get
juste?