¿Cómo mostrar la salida de una línea de comandos en la consola y guardar la salida en un archivo de texto?


25

¿Cómo puedo ejecutar sudo apt-get installpor AMBOS ver el proceso de instalación (de largo en mi caso) y guardar la salida en un archivo de texto?


¿Es solo apt-getcorrecto?
— Braiam

@Braiam Creo que la solución que acepté se puede aplicar a todos los demás comandos, ¿crees que sí?

Respuestas:


17

usa el scriptcomando. Copiará todo lo que vaya a la pantalla en un archivo

script -c "sudo apt-get install things" script-file.script

scriptenvía la salida del comando a un archivo, pero no lo muestra en la pantalla.
— Aaron

2
@ BryceAtNetwork23. ¿Intentaste el comando? guión hace salida de envío a la pantalla.
— exore

1
Yo si. Corrí script -c "history" ~/hist.txty vi la salida indicando Script startedy Script done, pero no vi la salida del comando real en la pantalla.
— Aaron

10
@ BryceAtNetwork23 historyes 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.
— exore

1
scriptTambién se puede ejecutar de forma interactiva. Simplemente escriba scripten el símbolo del sistema. Obtendrá un nuevo shell, y cualquier comando que escriba tendrá su salida guardada. Escriba exitpara finalizar el shell y guardar el archivo. De manera predeterminada, se llama a la salida typescripty 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 historycomando también debería estar disponible en el nuevo shell también.
— Brian Minton

52

Puede usar el teecomando 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>&1es necesario redirigir STDERR a STDOUT para detectar cualquier error. Consulte esta pregunta de StackOverflow para obtener una buena explicación de lo que 2>&1realmente hace.


Agregaría "2> y 1" antes de "|"
— Olivier Dulac

2
Esto es más práctico que scriptya que el comando no tiene que ser citado. Entonces, ventajas como completar bash es más fácil de lograr.
— Dan

2
@Dan: la secuencia de comandos no necesita -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)
— Olivier Dulac

2
@Dan + funciona con funciones, alias, incorporados e incluso grupos de comandos y subcapas. Esta debería ser la respuesta aceptada de la OMI.
— Darkhogg

1
podría usar en |&lugar de 2>&1 |en bash
— jfs

15

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

O, dado que es bash compatible con el |&operador , sudo apt-get install your_software |& tee log_file.txtcanalizará stdout y stderr a tee. (Felicitaciones a JF Sebastian que sugirió esto en otra parte .)
— Eliah Kagan

9

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.


1

prueba el comando tee . Puedes encontrar aquí algunos ejemplos.

Uso simple:

  <command> | tee file

ejemplo:

  sudo apt-get install whatYouWant | tee outputFile
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.