Захоплення виводу / перенаправлення команд, прикованих &&


11

У мене є ряд команд , а, Ь, з якою я Ланцюжок разом з &&: a && b && c.

Я хочу знайти результат всіх команд як stdout, так і stderr. a && b && c 2>&1 > capture_file лише фіксує вихід із команди c.

Відповіді:


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

Зверніть увагу на порядок переадресацій: спочатку потрібно перенаправити stdout.


Чому stdout спочатку?
TLOlczyk

@TLOlczyk 2>&1означає дублювання пункту призначення stdout (1) на stderr (2), тому було б марно, якщо ви не встановили заздалегідь перенаправлення stdout.
yaegashi

2
@TLOlczyk Не потрібно спочатку бути stdout - ви можете зробити stderr спочатку: 2>capture_file >&2(але не варто, тому що це не ідіоматично). Важливим є те, що ви перенаправляєте один з них на файл, перш ніж дублювати цей потік на інший.
Toby Speight

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.