Cuando ejecuto algunas pruebas, necesito ejecutar una serie de comandos. Sería extremadamente útil para mí y me ahorraría mucho tiempo si hubiera una manera de hacer todas estas cosas:
- Ejecute el comando que necesito ejecutar
- Redireccionar toda la salida del comando a un archivo especificado
- Incluye el comando original en el archivo especificado
- Imprima la salida del comando original en la terminal
La gente me ha sugerido usar tee, que hace un gran trabajo al imprimir en la terminal, así como enviarlo a un archivo pero no incluye el comando original. Con lo que me gustaría terminar es con un archivo donde la primera línea es el comando que ejecuté, y luego debajo está el resultado del comando.
Alguien sugirió esto:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Pero esto no imprime la salida en el terminal ni incluye el comando original en el archivo.
Agradecería cualquier idea.
command-line
shaneoh
fuente
fuente
tee
.Respuestas:
Eso es lo
tee
que estás buscando.imprime la salida de
ls -l
stdout (es decir, el terminal) y la guarda en el archivooutfile
al mismo tiempo. Pero : no escribe el nombre del comando ni en stdout ni en el archivo. Para lograr eso, soloecho
el nombre del comando antes de ejecutar el comando y canalizar ambas salidas atee
:Es engorroso escribir, así que ¿por qué no definir una función?
Después de eso puedes correr
para obtener el resultado deseado. Ponga la función en su
~/.bashrc
para tenerla definida en cada nueva terminal.Si desea poder especificar el archivo de salida como primer argumento como en
en cambio hazlo:
Si no desea que se sobrescriba el archivo de salida, sino que se anexe, agregue la
-a
opcióntee
.fuente
Puede utilizar el
script
comando que creará un archivo de texto mecanografiado de todo lo impreso en su terminal. Crea un caparazón bifurcado y registrará todo hasta que salga de ese caparazón.Entonces, si
cat my_output
obtengo el mismo resultado:fuente
Puede usar la función de depuración del shell junto con
tee
:( ... )
inicia un sub-shell que le permite "recopilar" las secuencias de salida de todos los comandos ejecutados dentro del sub-shell. También contiene el efecto delset
comando a continuación para este sub-shell.set -x
habilita lax
opción de shell que imprime todos los comandos que ejecuta el shell en la secuencia de error estándar antes de ejecutarlos.2>&1
redirige el flujo 2 (error estándar) al flujo 1 (salida estándar).|
redirige el flujo de salida estándar del comando izquierdo al flujo de entrada estándar del comando derecho.tee FILE
copia la secuencia de entrada estándar al archivoFILE
y a la salida estándar.Si su secuencia de comandos ya está en un archivo de script, tendría más sentido ejecutarlo así:
fuente