Источник сценария Bash, каждый с основной функцией

Вы можете использоватьtime(примечание :отдельный двоичный файл, а не оболочку, встроенную -в ), и комбинировать ее с циклом while. Чтобы получить время выполнения для каждой команды:

while read -r line; do
    /usr/bin/time -f "%e %C" $line 2>&1
done

Пример вывода:

0.1 sleep 0.1
0.2 sleep 0.2
1.0 sleep 1

Если вы хотите получить общее время выполнения с самого начала, вам необходимо просуммировать время выполнения для каждого шага. Точность для формата %eсоставляет 1/100 секунды, поэтому вы не можете использовать целочисленную арифметику оболочки напрямую (в зависимости от используемой вами оболочки ).

total=0.0

while read -r line; do
    t=$(/usr/bin/time -f "%e" $line 2>&1)
    total=$(awk "BEGIN{print $total+$t}")
    echo "$total $line"
done

Пример вывода:

0.1 sleep 0.1
0.3 sleep 0.2
1.3 sleep 1

1
06.11.2019, 22:41
2 ответа

Другой скрипт переопределит main(), да. Хотя в данном конкретном случае я не уверен, что это имеет значение, поскольку main()из сценария A запускается, когда сценарий B переопределяет функцию. Я сомневаюсь, что оболочка позволила бы переопределению изменить поведение уже -работающей функции.

То есть с учетом этих скриптов:

$ cat a.sh
main() {
    echo a1
   ../b.sh
    echo a2
}
main "$@"

$ cat b.sh
main() {
    echo b
}
main "$@"

запустив a.shс любой оболочкой я могу найти отпечатки a1, b, a2. Если бы a.shснова вызвала main, то, конечно, это привело бы к новому поведению.

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

Лучше спросить, зачем вообще нужно исходить скрипт B? Казалось бы, яснее иметь B как набор функций, загружаемых из источника, своего рода библиотеку; или , чтобы иметь его как независимую утилиту, вызываемую как обычная программа, без источника.

В первом случае A будет явно вызывать функции, определенные в A, по мере необходимости.

4
27.01.2020, 23:17

Краткий ответ Да

Подробный ответ Если вы создаете сценарий, это то же самое, что и выполнение сценария, но в вашем собственном процессе оболочки. Таким образом, переменные среды, имена функций и т. д. являются общими. См.https://superuser.com/a/176788/222230

0
27.01.2020, 23:17

Теги

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