1143 votos

¿Cómo guardo la salida de la terminal en un archivo?

¿Cómo puedo guardar la salida de un comando en un archivo?

¿Hay alguna forma de hacerlo sin utilizar ningún software? Me gustaría saber cómo.

1346voto

Seth Puntos 18134

Sí, es posible, simplemente redirija la salida (también conocida como stdout) a un archivo:

SomeCommand > SomeFile.txt  

O si desea agregar datos:

SomeCommand >> SomeFile.txt

Si desea stderr también, use esto:

SomeCommand &> SomeFile.txt  

o esto para agregar:

SomeCommand &>> SomeFile.txt  

si desea que tanto stderr como la salida se muestren en la consola y en un archivo, use esto:

SomeCommand 2>&1 | tee SomeFile.txt

(Si solo desea la salida, elimine el 2 de arriba)

28 votos

Ten en cuenta que someCommand 2> someFile.txt y someCommand 2>> someFile.txt también redirigen stderr a someFile.txt

0 votos

Estoy intentando hacer esto con el comando gcc pero no funciona. Funciona con otros comandos, pero no con este. Simplemente crea el archivo de salida sin nada dentro.

0 votos

@Nik-Lz A menudo esto se debe a que el comando está enviando toda su salida en stderr. Si gcc está generando mensajes de error, esto parece probable. Consulta el comentario de Slothworks sobre cómo capturar stderr en lugar de stdout.

1335voto

Byte Commander Puntos 9266

Para escribir la salida de un comando en un archivo, existen básicamente 10 formas comúnmente utilizadas.

Resumen:

<em>Por favor, ten en cuenta que el <code>n.e.</code> en la columna de sintaxis significa "no existente".<br>Hay una forma, pero es demasiado complicada para encajar en la columna. Puedes encontrar un enlace útil en la sección de Lista al respecto.</em>

          || visible en terminal ||   visible en archivo  || existente
  Sintaxis  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   archivo   
==========++==========+==========++==========+==========++===========
    >     ||    no    |   sí     ||   sí     |    no    || sobrescribir
    >>    ||    no    |   sí     ||   sí     |    no    ||  añadir
          ||          |          ||          |          ||
   2>     ||   sí     |    no    ||    no    |   sí     || sobrescribir
   2>>    ||   sí     |    no    ||    no    |   sí     ||  añadir
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   sí     |   sí     || sobrescribir
   &>>    ||    no    |    no    ||   sí     |   sí     ||  añadir
          ||          |          ||          |          ||
 | tee    ||   sí     |   sí     ||   sí     |    no    || sobrescribir
 | tee -a ||   sí     |   sí     ||   sí     |    no    ||  añadir
          ||          |          ||          |          ||
 n.e. (*) ||   sí     |   sí     ||    no    |   sí     || sobrescribir
 n.e. (*) ||   sí     |   sí     ||    no    |   sí     ||  añadir
          ||          |          ||          |          ||
|& tee    ||   sí     |   sí     ||   sí     |   sí     || sobrescribir
|& tee -a ||   sí     |   sí     ||   sí     |   sí     ||  añadir

Lista:

  • comando > output.txt

    El flujo de salida estándar se redirigirá únicamente al archivo, no será visible en el terminal. Si el archivo ya existe, será sobrescrito.

  • comando >> output.txt

    El flujo de salida estándar se redirigirá únicamente al archivo, no será visible en el terminal. Si el archivo ya existe, los nuevos datos se añadirán al final del archivo.

  • comando 2> output.txt

    El flujo de error estándar se redirigirá únicamente al archivo, no será visible en el terminal. Si el archivo ya existe, será sobrescrito.

  • comando 2>> output.txt

    El flujo de error estándar se redirigirá únicamente al archivo, no será visible en el terminal. Si el archivo ya existe, los nuevos datos se añadirán al final del archivo.

  • comando &> output.txt

    Ambos el flujo de salida estándar y el flujo de error estándar se redirigirán únicamente al archivo, nada será visible en el terminal. Si el archivo ya existe, será sobrescrito.

  • comando &>> output.txt

    Ambos el flujo de salida estándar y el flujo de error estándar se redirigirán únicamente al archivo, nada será visible en el terminal. Si el archivo ya existe, los nuevos datos se añadirán al final del archivo.

  • comando | tee output.txt

    El flujo de salida estándar se copiará al archivo, pero seguirá siendo visible en el terminal. Si el archivo ya existe, será sobrescrito.

  • comando | tee -a output.txt

    El flujo de salida estándar se copiará al archivo, pero seguirá siendo visible en el terminal. Si el archivo ya existe, los nuevos datos se añadirán al final del archivo.

  • (*)

    Bash no tiene una sintaxis abreviada que permita redirigir solo StdErr a un segundo comando, lo cual sería necesario aquí en combinación con tee nuevamente para completar la tabla. Si realmente necesitas algo así, por favor mira "¿Cómo redireccionar stderr, y no stdout?" en Stack Overflow para ver algunas maneras de hacerlo, por ejemplo intercambiando flujos o utilizando sustitución de procesos.

  • comando |& tee output.txt

    Ambos el flujo de salida estándar y el flujo de error estándar se copiarán al archivo, pero seguirán siendo visibles en el terminal. Si el archivo ya existe, será sobrescrito.

  • comando |& tee -a output.txt

    Ambos el flujo de salida estándar y el flujo de error estándar se copiarán al archivo, pero seguirán siendo visibles en el terminal. Si el archivo ya existe, los nuevos datos se añadirán al final del archivo.

95 votos

¡Gracias por la tabla, es excelente! Esta debería ser la respuesta principal

0 votos

¡Gran información! ¿Puedes también añadir los detalles de 2>&1 / 1>&2 / 3>&1?

3 votos

@karthick87 Esto no está realmente relacionado con la pregunta sobre redirigir la salida a un archivo, ya que simplemente redirige un flujo a otro. 2>&1 redirige STDERR a STDOUT, 1>&2 redirige STDOUT a STDERR y 3>&1 redirigiría el flujo 3 a STDERR.

126voto

mars-o Puntos 593

También puedes usar tee para enviar la salida a un archivo:

comando | tee ~/archivo_de_salida.txt

Una ligera modificación capturará también stderr:

comando 2>&1 | tee ~/archivo_de_salida.txt

o un poco más corto y menos complicado:

comando |& tee ~/archivo_de_salida.txt

tee es útil si deseas poder capturar la salida del comando mientras la visualizas en tiempo real.

0 votos

Dice que el carácter & es inesperado y no escribe el registro al mismo tiempo que se ejecuta el comando. Sin embargo, estoy usando esto en un archivo bash, ¿eso hace alguna diferencia?

0 votos

@tim687 He eliminado esa edición. Lo siento por eso... no formaba parte de mi respuesta original.

0 votos

@Aaron ¡Gracias! ¿tee agregará el archivo en tiempo real, verdad? Tengo un script de respaldo que utilizo para, jeje, respaldar mi PC, pero el registro no es en tiempo real. Mi PC se va a dormir después de que se completa la copia de seguridad, y el archivo de registro está vacío. ¿Debería usar otro comando para registrar los comandos?

20voto

chaos Puntos 11188

Puedes redirigir la salida del comando a un archivo:

tu_comando >/ruta/hacia/archivo

Para agregar la salida del comando a un archivo en lugar de sobrescribirla, usa:

tu_comando >>/ruta/hacia/archivo

0 votos

¡Muchas gracias! ¿Hay algún límite? ¿como el tamaño máximo del archivo?

3 votos

El tamaño máximo del archivo está limitado únicamente a través del sistema de archivos

0 votos

Esta respuesta no guardará stderr. Utilice &>, consulte stackoverflow.com/questions/637827/… y tldp.org/LDP/abs/html/io-redirection.html

19voto

Sean Huber Puntos 131

Una mejora a considerar -

Varios scripts inyectarán códigos de color en la salida que quizás no quieras que ensucien tu archivo de registro.

Para solucionar esto, puedes utilizar el programa sed para eliminar esos códigos. Ejemplo:

comando 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/archivo_de_salida.txt

1 votos

¿Cómo guardar la salida de manera que se conserven los colores? Me gustaría importar el resultado de un comando en LibreOffice y mantener los colores.

1 votos

@madrang: Solo acabo de leer tu comentario, pero es posible que encuentres esta respuesta útil.

0 votos

Oh, casi exactamente lo que estoy buscando. ¿Cómo imprimir también en pantalla la salida?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X