Respuestas:
usa el script
comando. Copiará todo lo que vaya a la pantalla en un archivo
script -c "sudo apt-get install things" script-file.script
script
envía la salida del comando a un archivo, pero no lo muestra en la pantalla.
script -c "history" ~/hist.txt
y vi la salida indicando Script started
y Script done
, pero no vi la salida del comando real en la pantalla.
history
es un shell incorporado, no un comando externo. Lo que sucede es: 1) la secuencia de comandos comienza, 2) la secuencia de comandos busca el comando de historial, no lo encuentra, por lo que adivina que debería ejecutarse a través de un shell. 3) el script ejecuta el comando a history
través de un shell 4) se inicia un nuevo shell y ejecuta el comando interno del historial. Como se trata de un nuevo shell no interactivo, la historia no tiene nada que decir.
script
También se puede ejecutar de forma interactiva. Simplemente escriba script
en el símbolo del sistema. Obtendrá un nuevo shell, y cualquier comando que escriba tendrá su salida guardada. Escriba exit
para finalizar el shell y guardar el archivo. De manera predeterminada, se llama a la salida typescript
y contendrá todo lo que se muestra en la pantalla, ya sea que lo haya escrito o que haya sido la salida de un comando. El history
comando también debería estar disponible en el nuevo shell también.
Puede usar el tee
comando para lograr esto.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Mira aquí para más información , o ejecutaman tee
Nota: Como otros han mencionado, 2>&1
es necesario redirigir STDERR a STDOUT para detectar cualquier error. Consulte esta pregunta de StackOverflow para obtener una buena explicación de lo que 2>&1
realmente hace.
script
ya que el comando no tiene que ser citado. Entonces, ventajas como completar bash es más fácil de lograr.
-c "something ..."
: if lo dejará en un shell y finalizará cuando salga de ese shell. Permite múltiples comandos, etc. Además, mantiene más información de "formateo", lo que permite reproducir algunas cosas más (como: pantalla clara, etc.) (pero eso también puede estropear la salida ... ymmv)
|&
lugar de 2>&1 |
en bash
tee
hará el trabajo según sea necesario.
Para capturar la salida en un archivo, use:
sudo apt-get install your_software | tee log_file.txt
Esto solo capturará la salida, pero no los mensajes de error. Si también desea grabar mensajes de error, modifique el comando para que sea:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash
compatible con el |&
operador , sudo apt-get install your_software |& tee log_file.txt
canalizará stdout y stderr a tee
. (Felicitaciones a JF Sebastian que sugirió esto en otra parte .)
Una de las ventajas de apt-get (y APT en general) es que almacenan archivos de registro para casi todo, incluso la salida del terminal de cualquier comando que ejecute, en el /var/log/apt
. Por ejemplo, esta es la última entrada en mi /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
Ahora, comparando con la salida real:
➜ ~ 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) ...
Me salvó varias líneas que no son relevantes en la mayoría de los casos, y lo hace automáticamente. Por lo tanto, no necesita ningún comando adicional para hacer lo que quiere hacer, apt-get lo hace por usted.
apt-get
correcto?