Bug 48890 - Отсутствует встроенная команда time
Summary: Отсутствует встроенная команда time
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: bash5 (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-12-21 08:36 MSK by xdsl
Modified: 2023-12-23 10:25 MSK (History)
9 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description xdsl 2023-12-21 08:36:16 MSK
Команда time описана в разделе 3.2.3 Pipelines https://www.gnu.org/software/bash/manual/bash.html, описание доступно также через help time.

Команда time отсутствует в bash4, проверено на 9 и 10 платформах.

Сборка из bash4-4.4.23-alt1.src.rpm, без патчей и спеков, дает bash с командой time. Сборка через rpm --rebuil bash4-4.4.23-alt1.src.rpm дает bash без команды time.

Возможное объяснение в спеке: Tue Jul 8 1999 Thierry Vignaud <tvignaud@mandrakesoft.com> : "disable built-in time command (incompatible with standard POSIX time command)". 

24 года прошло, причина все еще актуальна? Или причина в чем-то другом?
Comment 1 Alexander Makeenkov 2023-12-21 09:14:15 MSK
Команда time есть в отдельном пакете с аналогичным названием:

$ time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
       [--portability] [--format=format] [--output=file] [--version]
       [--quiet] [--help] command [arg...]

$ rpm -qf $(which time)
time-1.7-alt4.x86_64
Comment 2 Sergey Y. Afonin 2023-12-21 16:27:48 MSK
(In reply to xdsl from comment #0)

> Возможное объяснение в спеке: Tue Jul 8 1999 Thierry Vignaud
> <tvignaud@mandrakesoft.com> : "disable built-in time command (incompatible
> with standard POSIX time command)". 
> 
> 24 года прошло, причина все еще актуальна? Или причина в чем-то другом?

А этого, разве, мало? Или time в bash стал совместим с POSIX? На что ориентируются скрипты, использующие time, и как они себя поведут в bash, котрый пересборан с встроенной time?
Comment 3 xdsl 2023-12-22 08:08:35 MSK
Под рукой были Ubuntu, Debian, Mandrake, Astra - все собирают bash с командой time.
Утилита меряет время до сотых секунды, команда - до тысячных. Может в 99 году это было несущественно, но сейчас - актуально.
Comment 4 Sergey V Turchin 2023-12-22 14:12:40 MSK
Пусть мантейнер пакета решит.
Comment 5 Anton Farygin 2023-12-22 14:19:24 MSK
Тогда уж сразу на bash5
Comment 6 Sergey Y. Afonin 2023-12-22 15:55:22 MSK
(In reply to Anton Farygin from comment #5)

> Тогда уж сразу на bash5

А в p11 что по умолчанию предполагается?
Comment 7 AEN 2023-12-22 16:05:20 MSK
(Ответ для Sergey Y. Afonin на комментарий #6)
> (In reply to Anton Farygin from comment #5)
> 
> > Тогда уж сразу на bash5
> 
> А в p11 что по умолчанию предполагается?

https://packages.altlinux.org/ru/sisyphus/srpms/bash-defaults/

p11 будет бранчеваться из нынешнего Sisyphus
Comment 8 Dmitry V. Levin 2023-12-23 01:57:06 MSK
(In reply to xdsl from comment #3)
> Под рукой были Ubuntu, Debian, Mandrake, Astra - все собирают bash с
> командой time.
> Утилита меряет время до сотых секунды, команда - до тысячных. Может в 99
> году это было несущественно, но сейчас - актуально.

time ничего не меряет, все измерения производит ядро, time лишь выводит результат измерений.  Формат вывода time(1), в том числе точность, настраивается с помощью параметра --format.  Появление bash builtin, перекрывающего time(1), создало бы проблемы пользователям bash, которые используют возможности time(1), отсутствующие в bash builtin.  Не следует ломать обратную совместимсть без веских оснований.
Comment 9 xdsl 2023-12-23 09:06:26 MSK
(Ответ для Dmitry V. Levin на комментарий #8)
> (In reply to xdsl from comment #3)
> > Под рукой были Ubuntu, Debian, Mandrake, Astra - все собирают bash с
> > командой time.
> > Утилита меряет время до сотых секунды, команда - до тысячных. Может в 99
> > году это было несущественно, но сейчас - актуально.
> 
> time ничего не меряет, все измерения производит ядро, time лишь выводит
> результат измерений.  Формат вывода time(1), в том числе точность,
> настраивается с помощью параметра --format.  Появление bash builtin,
> перекрывающего time(1), создало бы проблемы пользователям bash, которые
> используют возможности time(1), отсутствующие в bash builtin.  Не следует
> ломать обратную совместимсть без веских оснований.

В time.c из https://git.altlinux.org/tasks/278099/build/4500/x86_64/srpm/time-1.7-alt4.src.rpm недвусмысленно сказано:
...
369         case 'E':       /* Elapsed real (wall clock) time.  */
370           if (resp->elapsed.tv_sec >= 3600) /* One hour -> h:m:s.  */
371             fprintf (fp, "%ld:%02ld:%02ld",
372              resp->elapsed.tv_sec / 3600,
373              (resp->elapsed.tv_sec % 3600) / 60,
374              resp->elapsed.tv_sec % 60);
375           else
376             fprintf (fp, "%ld:%02ld.%02ld", /* -> m:s.  */
377              resp->elapsed.tv_sec / 60,
378              resp->elapsed.tv_sec % 60,
379              resp->elapsed.tv_usec / 10000);
380           break;
...
Каким образом можно получить тысячные доли секунды таким кодом? Какой --format поможет?