было бы здорово узнать, через какое количество секунд (или миллисекунд) запускается конкретная подкоманда
Одна возможность - использовать эту переменную bash
:
СЕКУНД
Эта переменная увеличивается до количества секунд с момента запуска оболочки.
Присвоение этой переменной сбрасывает счет до присвоенного значения, и расширенное значение становится присвоенным значением плюс количество секунд с момента присвоения.
Чтобы объединить это с выходным потоком, рассмотрим этот специальный скрипт, который добавляет временную метку к каждой строке ввода:
$ cat timestamp-output
#!/bin/bash
while read line
do
printf "%05d %s\n" $SECONDS "$line"
done
И передайте вывод вашего скрипта в этот скрипт.
$ your-script | timestamp-output
Пример:
$ cat your-script
#!/bin/bash
for i in 1 2 3 4
do
echo "step $i started";
sleep $(($RANDOM%10));
done
$ your-script | timestamp-output
Выход:
00000 шаг 1 начался
00002 шаг 2 начался
00010 шаг 3 начался
00015 шаг 4 начался
Это можно уточнить, чтобы помечать метками времени только выходные строки, которые сигнализируют о начале подкоманды, предполагая, что они могут быть grep'ed:
#!/bin/bash
regex="^start of command"
while read line
do
if [[ "$line" =~ $regex ]]; then
printf "%05d %s\n" $SECONDS "$line"
else
echo "$line"
fi
done
Пример скрипта:
#!/bin/bash
for i in 1 2 3 4
do
echo "start of command: $i";
echo some output
echo other output
sleep $(($RANDOM%10));
done
Образец вывода:
00000 start of command: 1
some output
other output
00002 start of command: 2
some output
other output
00006 start of command: 3
some output
other output
00008 start of command: 4
some output
other output