¿Cómo guardo la salida de un comando en un archivo?
¿Hay alguna manera sin usar ningún software? Me gustaria saber como
command-line
led-Zepp
fuente
fuente
someCommand 2> someFile.txt
ysomeCommand 2>> someFile.txt
también redirigestterr
a someFile.txtmake
comando en un archivo, se requiere esta sintaxis:make > someFile.txt 2>&1
(fuente: linuxquestions.org/questions/linux-newbie-8/… )Para escribir la salida de un comando en un archivo, existen básicamente 10 formas de uso común.
Visión de conjunto:
Lista:
command > output.txt
La secuencia de salida estándar se redirigirá solo al archivo, no será visible en el terminal. Si el archivo ya existe, se sobrescribe.
command >> output.txt
La secuencia de salida estándar se redirigirá solo al archivo, no será visible en el terminal. Si el archivo ya existe, los nuevos datos se agregarán al final del archivo.
command 2> output.txt
El flujo de error estándar será redirigido solo al archivo, no será visible en el terminal. Si el archivo ya existe, se sobrescribe.
command 2>> output.txt
El flujo de error estándar será redirigido solo al archivo, no será visible en el terminal. Si el archivo ya existe, los nuevos datos se agregarán al final del archivo.
command &> output.txt
Tanto la salida estándar como la secuencia de error estándar se redirigirán al archivo solamente, no habrá nada visible en el terminal. Si el archivo ya existe, se sobrescribe.
command &>> output.txt
Tanto la salida estándar como la secuencia de error estándar se redirigirán al archivo solamente, no habrá nada visible en el terminal. Si el archivo ya existe, los nuevos datos se agregarán al final del archivo.
command | tee output.txt
La secuencia de salida estándar se copiará en el archivo, aún estará visible en el terminal. Si el archivo ya existe, se sobrescribe.
command | tee -a output.txt
La secuencia de salida estándar se copiará en el archivo, aún estará visible en el terminal. Si el archivo ya existe, los nuevos datos se agregarán al final del archivo.
(*)
Bash no tiene una sintaxis abreviada que permita canalizar solo StdErr a un segundo comando, que se necesitaría aquí en combinación con
tee
nuevamente para completar la tabla. Si realmente necesita algo así, consulte "¿Cómo canalizar stderr y no stdout?" en Stack Overflow para ver cómo se puede hacer, por ejemplo, intercambiando flujos o usando la sustitución de procesos.command |& tee output.txt
Tanto la salida estándar como las secuencias de error estándar se copiarán en el archivo sin dejar de ser visibles en el terminal. Si el archivo ya existe, se sobrescribe.
command |& tee -a output.txt
Tanto la salida estándar como las secuencias de error estándar se copiarán en el archivo sin dejar de ser visibles en el terminal. Si el archivo ya existe, los nuevos datos se agregarán al final del archivo.
fuente
2>&1
redirige STDERR a STDOUT,1>&2
redirige STDOUT a STDERR y3>&1
redirigiría la secuencia 3 a STDERR.sh: 1: Syntax error: "&" unexpected
cuando lo uso|& tee
desde un script de Python en un servidor c9.io. Parece que se está utilizando un caparazón diferente.echo $SHELL
muestra/bin/bash
y$SHELL --version
muestra la versión 4.3.11 (1) -lanzamiento. Intenté#!/bin/bash
en mi script de Python pero todavía consigosh: 1: Syntax error
. Obtuve lo que necesitaba, así que renuncio a ordenar las rarezas entresh
ybash
en mi servidor. Gracias.sh
y nobash
(o tal vezbash
ensh
modo ...). Puede verificar qué está utilizando exactamente su proceso de shell actualps -p $$ -o cmd=
, porqueecho $SHELL
no es confiable y le mostrará su shell de inicio de sesión, ignorando si podría haber iniciado un subshell diferente.También puede usar
tee
para enviar la salida a un archivo:Una ligera modificación también atrapará a stderr:
o un poco más corto y menos complicado:
tee
es útil si desea poder capturar la salida del comando mientras lo ve en vivo .fuente
2>&1
?Puede redirigir la salida del comando a un archivo:
Para agregar el resultado del comando a un archivo en lugar de sobrescribirlo, use:
fuente
Una mejora a tener en cuenta:
Varios scripts inyectarán códigos de color en la salida que quizás no desee saturar su archivo de registro.
Para solucionar esto, puede usar el programa sed para eliminar esos códigos. Ejemplo:
fuente
ls
ygrep
, soportan--color=auto
, que genera códigos de color solo si la salida estándar es un terminal.Para
cron
trabajos, etc., desea evitar las extensiones Bash. Lossh
operadores de redireccionamiento POSIX equivalentes sonNotarás que la instalación POSIX es, en cierto sentido, más simple y más directa. Se
&>
tomó prestada la sintaxis,csh
que ya debería convencerlo de que es una mala idea.fuente
some_command | tee command.log
ysome_command > command.log
tienen el problema de que no guardan la salida del comando en elcommand.log
archivo en tiempo real.Para evitar ese problema y guardar la salida del comando en tiempo real, puede agregar
unbuffer
, que viene con elexpect
paquete.Ejemplo:
Suponiendo que
log.py
contiene:puedes correr
unbuffer python log.py | tee command.log
ounbuffer python log.py > command.log
Más información: ¿Cómo puedo guardar la salida de un comando en un archivo en tiempo real?
fuente