Захват вывода / перенаправление команд, связанных & &


10

У меня есть ряд команд , а, Ь, с которой я Цепочка вместе с &&: a && b && c.

Я хочу перехватить вывод всех команд на stdout и stderr. a && b && c 2>&1 > capture_file захватывает только выходные данные команды c.

Ответы:


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

Обратите внимание на порядок перенаправлений: сначала вы должны перенаправить стандартный вывод.


Почему первый вывод?
TLOlczyk

@TLOlczyk 2>&1означает дублирование места назначения stdout (1) в stderr (2), так что это будет бесполезно, если вы предварительно не настроили перенаправление stdout.
Яэгаши

2
@TLOlczyk Это не должно быть сначала stdout - сначала вы можете сделать stderr: 2>capture_file >&2(но не делайте, потому что это не идиоматично). Важно то, что вы перенаправляете один из них в файл, а затем дублируете этот поток на другой.
Тоби Спейт

1

Помимо использования группирования команд {}вы также можете запускать команды в подоболочке и фиксировать вывод (и / или ошибку) сразу:

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

Пример :

$ ( 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.