Capturando salida / redirección de comandos encadenados por &&


10

Tengo una serie de comandos a, b, c, que estoy encadenando con &&: a && b && c.

Quiero capturar la salida de todos los comandos para stdout y stderr. a && b && c 2>&1 > capture_file solo captura la salida del comando c.

Respuestas:


10
{ a && b && c; } >capture_file 2>&1

Tenga en cuenta el orden de las redirecciones: primero debe redirigir stdout.


¿Por qué stdout primero?
TLOlczyk

@TLOlczyk 2>&1significa duplicar el destino de stdout (1) a stderr (2), por lo que sería inútil a menos que haya configurado la redirección de stdout de antemano.
yaegashi

2
@TLOlczyk No tiene que ser stdout primero, podrías hacer stderr primero: 2>capture_file >&2(pero no, porque eso no es idiomático). Lo importante es que redirija uno de ellos a un archivo antes de duplicar ese flujo al otro.
Toby Speight

1

Además de usar la agrupación de comandos {}, también puede ejecutar los comandos en una subshell y capturar la salida (y / o error) de una vez:

( a && b && c ) >file.txt 2>&1

Ejemplo:

$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1

$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
 Command 'echo' from package 'coreutils' (main)
echos: command not found
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.