Respuestas:
Sí, es posible, solo redirige la salida a un archivo:
SomeCommand > SomeFile.txt
O si desea agregar datos:
SomeCommand >> SomeFile.txt
Si también quieres stderrusar esto:
SomeCommand &> SomeFile.txt
o esto para agregar:
SomeCommand &>> SomeFile.txt
si desea que tanto la stderrsalida 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, suelte lo 2anterior)
makecomando 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.
Tenga en cuenta que
n.e.en la columna de sintaxis significa "no existente".
Hay una manera, pero es demasiado complicado para encajar en la columna. Puede encontrar un enlace útil en la sección Lista al respecto.
|| visible in terminal || visible in file || existing
Syntax || StdOut | StdErr || StdOut | StdErr || file
==========++==========+==========++==========+==========++===========
> || no | yes || yes | no || overwrite
>> || no | yes || yes | no || append
|| | || | ||
2> || yes | no || no | yes || overwrite
2>> || yes | no || no | yes || append
|| | || | ||
&> || no | no || yes | yes || overwrite
&>> || no | no || yes | yes || append
|| | || | ||
| tee || yes | yes || yes | no || overwrite
| tee -a || yes | yes || yes | no || append
|| | || | ||
n.e. (*) || yes | yes || no | yes || overwrite
n.e. (*) || yes | yes || no | yes || append
|| | || | ||
|& tee || yes | yes || yes | yes || overwrite
|& tee -a || yes | yes || yes | yes || append
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 teenuevamente 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.
2>&1redirige STDERR a STDOUT, 1>&2redirige STDOUT a STDERR y 3>&1redirigiría la secuencia 3 a STDERR.
sh: 1: Syntax error: "&" unexpectedcuando lo uso |& teedesde un script de Python en un servidor c9.io. Parece que se está utilizando un caparazón diferente. echo $SHELLmuestra /bin/bashy $SHELL --versionmuestra la versión 4.3.11 (1) -lanzamiento. Intenté #!/bin/bashen mi script de Python pero todavía consigo sh: 1: Syntax error. Obtuve lo que necesitaba, así que renuncio a ordenar las rarezas entre shy bashen mi servidor. Gracias.
shy no bash(o tal vez bashen shmodo ...). Puede verificar qué está utilizando exactamente su proceso de shell actual ps -p $$ -o cmd=, porque echo $SHELLno 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 teepara enviar la salida a un archivo:
command | tee ~/outputfile.txt
Una ligera modificación también atrapará a stderr:
command 2>&1 | tee ~/outputfile.txt
o un poco más corto y menos complicado:
command |& tee ~/outputfile.txt
teees útil si desea poder capturar la salida del comando mientras lo ve en vivo .
2>&1?
Puede redirigir la salida del comando a un archivo:
your_command >/path/to/file
Para agregar el resultado del comando a un archivo en lugar de sobrescribirlo, use:
your_command >>/path/to/file
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:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
lsy grep, soportan --color=auto, que genera códigos de color solo si la salida estándar es un terminal.
Para crontrabajos, etc., desea evitar las extensiones Bash. Los shoperadores de redireccionamiento POSIX equivalentes son
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
Notarás que la instalación POSIX es, en cierto sentido, más simple y más directa. Se &>tomó prestada la sintaxis, cshque ya debería convencerlo de que es una mala idea.
some_command | tee command.logy some_command > command.logtienen el problema de que no guardan la salida del comando en el command.logarchivo en tiempo real.
Para evitar ese problema y guardar la salida del comando en tiempo real, puede agregar unbuffer, que viene con el expectpaquete.
Ejemplo:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
Suponiendo que log.pycontiene:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
puedes correr unbuffer python log.py | tee command.logounbuffer python log.py > command.log
Más información: ¿Cómo puedo guardar la salida de un comando en un archivo en tiempo real?
someCommand 2> someFile.txtysomeCommand 2>> someFile.txttambién redirigestterra someFile.txt