Разделение файловой системы Linux на разных NAS

Если порядок вывода должен быть:stdout, то stderr ; нет решения только с перенаправлением.
stderr должен храниться во временном файле

.
cmd 2>>file-err | tee -a file1 >>file2
cat file-err >> file1
rm file-err

Описание:

Единственный способ перенаправить один вывод (fd типа stdout или stderr )в два файла — это воспроизвести его. Команда tee— правильный инструмент для воспроизведения содержимого файлового дескриптора. Таким образом, первоначальная идея иметь один вывод для двух файлов состоит в том, чтобы использовать:

... |  tee file1 file2

Это воспроизводит стандартный ввод tee в оба файла (1 и 2 ), оставляя вывод tee по-прежнему неиспользованным. Но нам нужно добавить (use-a)и нужна только одна копия. Это решает обе проблемы:

... | tee -a file1 >>file2

Чтобы поставить teeс stdout (для повторения ), нам нужно использовать stderr непосредственно из команды. В одном случае, если порядок не важен, (порядок вывода будет (скорее всего )сохранен в том виде, в котором он был сгенерирован, то, что будет выведено первым, будет сохранено первым ). Либо:

  1. cmd 2>>file1 | tee -a file2 >>file1
  2. cmd 2>>file1 > >( tee -a file2 >>file1 )
  3. ( cmd | tee -a file2 ) >> file1 2>&1

Вариант 2 работает только в некоторых оболочках. Вариант 3 использует дополнительную подоболочку (медленнее ), но использует имена файлов только один раз.

Но если stdoutдолжен быть первым (в зависимости от того, в каком порядке генерируется вывод )нам нужно сохранить stderr, чтобы добавить его в конец файла (первое опубликованное решение ).

0
02.07.2021, 21:35
0 ответов

Теги

Похожие вопросы