Есть ли противоположность «тройнику» - потоковая передача нескольких каналов вместе?

Гораздо проще измерить время в секундах, начиная с эпохи ( +% s ). Затем прошедшее время в секундах получается путем простого вычитания и преобразования из секунд в Минуту просто нужно разделить на 60:

export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"

Если вам действительно нужно время в человеческой форме, вы можете преобразовать их. Использование GNU date :

$ date -d "@$etool_start"
Tue Jul  5 21:30:19 PDT 2016

Или:

$ date -d "@$etool_start"  "+%Y%m%d%H%M"
201607052130

Подробнее о форматировании

Чтобы выразить прошедшее время в минутах в различных форматах, мы можем использовать printf . Например, чтобы получить истекшее время с четырьмя цифрами, мы можем использовать формат % 04i :

$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))" 
0001

Формат % 4i даст нам целое число (i) в четырех символы. Если нам нужны ведущие нули вместо ведущих пробелов, мы используем % 04i .

Если нам нужен противоположный знак для числа:

$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))" 
-0035

Поскольку для знака минус требуется дополнительный символ, мы увеличили выделенное пространство с 4 до 5: % 05i .

Больше разрешения

Поскольку в приведенном выше примере использовалась арифметика bash, которая является только целочисленной. Если вы хотите, чтобы истекшее время в минутах с долями минуты, можно использовать другой инструмент, например bc :

$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333

Сколько секунд прошло с начала эпохи?

Из man date ], секунды с начала эпохи определяются следующим образом:

% s
секунд с 1970-01-01 00:00:00 UTC

Поскольку это определено таким образом, местный часовой пояс не имеет значения. Следовательно, вычисление его в "местном часовом поясе" или во всемирном времени, -u , не имеет значения:

$ date +%s; date -u +%s
1467780345
1467780345
3
10.05.2017, 18:01
2 ответа

Совместное сопоставление выходных данных на самом деле не двойственно tee. teeделает несколько копий своих входных данных, в то время как сопоставление выходных данных не требует объединения данных.

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

{ data_source_1 &
  data_source_2 &
  wait; } >merged_output

Если вы получаете входные данные от нескольких файловых дескрипторов и хотите их объединить, пропустите каждый из них.

{ cat <&3 & cat <&4 & wait; } >merged_ouput

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

… 3>merged_ouput 4>&3
6
27.01.2020, 21:15

Вам нужно добавить STDERR и STDOUT в STDOUT в каждом процессе.

Пример:
процессA 2>&1 | процессБ | processC

STDOUT и STDERR будут перенаправлены через PIPE в качестве STDIN для processB. Однако processC получит только STDOUT ProcessB как STDIN.

Итак, если вам нужны STDOUT и STDERR процесса B в качестве STDIN для процесса C, это будет: процессA 2>&1 | процессB 2>&1 | processC

Если вы действительно не хотите использовать конвейеры, а хотите просто перенаправить весь вывод в один файл, вы можете сделать:

(processA; processB) >./just_STDOUT.txt

(процессA 2>&1; процессB 2>&1) >./STDOUT_AND_STDERR.txt

0
27.01.2020, 21:15

Теги

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

  • 2
    увеличить LVM и DRBD 16.03.2017
    У меня есть две виртуальные машины CentOS7 в первичном / вторичном состоянии. Моя цель - увеличить размер блока DRBD. для этого я проделал следующие шаги: 1. добавил новый HD. 2. Создал новый раздел с помощью fdisk - отформатирован как LVM (/ dev / ...
  • 2
    Процесс в конвейере, который обрабатывает 256 байт за раз 25.06.2020
    У меня есть программа на Cyclone 5, выполняющая БПФ с использованием подключенной ПЛИС. Эта программа в настоящее время берет 256 байтов из стандартного ввода, а затем обрабатывает его, выдавая результаты БПФ на стандартный вывод. Запускаю так...
  • 34
    Как запустить секунду X сессий? 08.06.2014
    Я пытался сделать это с startx 1 команды. Это, казалось, мерцало на другой экран на мгновение, но затем вышедший. Получил следующую ошибку:/usr/bin/xterm: Никакой полный путь не нашел для оболочки::1...
  • 4
    Как найти каталоги, содержащие только определенные файлы 13.08.2019
    У меня есть несколько каталогов с бесполезными файлами (например, *.tmp, desktop.ini, Thumbs.db, .picasa.ini). Как просканировать все диски, чтобы найти каталоги, в которых нет ничего, кроме некоторых из этих файлов?