История bash, в которой хранится время выполнения?

while read -r things; do
  printf "%s\n" "$things"
done 

Если вы обнаружите, что пишете для i в $ (cat ... , то остановитесь и измените это на при чтении -ri вместо этого и введите данные в done . Нет причин перебирать содержимое всего файла только для того, чтобы зацикливаться на нем, а в некоторых контекстах (большие данные), которые могут привести к большим неприятностям.

-r Флаг для чтения заставит read правильно обрабатывать обратную косую черту.

Я также использую printf вместо echo . Почему? См. Здесь .

Я также цитирую свои переменные. Почему? См. Здесь .

3
05.12.2016, 22:48
2 ответа

Использование дочернего процесса задается где-то в системных вызовах wait3 или wait4 через указатель struct rusage ( wait4 (2) ). В источниках bash мы находим:

$ egrep -r 'wait[34][[:blank:]]*\(' .
./jobs.c:   wait3 ((union wait *)statusp, options, (struct rusage *)0)
./jobs.c:   wait3 (statusp, options, (struct rusage *)0)
./jobs.c:   wait3 (statusp, options, (int *)0)
$

Пустой (struct rusage *) 0 указывает, что использование ресурсов не будет возвращено в bash . Поиск struct rusage действительно вызывает функцию time_command в execute_cmd.c , и это, похоже, собирает информацию об использовании через getrusage (2) . Однако это относится к TIMEFORMAT встроенной функции time и, похоже, не пересекается с кодом истории. Без исправления bash , я полагаю, вам нужно было бы выполнить какой-то клудж, связанный с запуском всего за время , а затем фиксировать стандартную ошибку, когда информация о времени появляется в каком-то файле?

]
1
20.08.2021, 11:52

Определив HISTTIMEFORMAT в сценариях запуска, вы добавите метку времени к каждой строке файла истории bash. Значение этой переменной - это способ (*) печати временных меток на экране. Вот мой:

HISTTIMEFORMAT='%F-%T '

(*) См. man 3 strftime (если у вас его нет, man date должно помочь)

1
20.08.2021, 11:52

Теги

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