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
teeque estás buscando.imprime la salida de
ls -lstdout (es decir, el terminal) y la guarda en el archivooutfileal mismo tiempo. Pero : no escribe el nombre del comando ni en stdout ni en el archivo. Para lograr eso, soloechoel 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
~/.bashrcpara 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
-aopcióntee.fuente
Puede utilizar el
scriptcomando 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_outputobtengo 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 delsetcomando a continuación para este sub-shell.set -xhabilita laxopción de shell que imprime todos los comandos que ejecuta el shell en la secuencia de error estándar antes de ejecutarlos.2>&1redirige 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 FILEcopia la secuencia de entrada estándar al archivoFILEy 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