преобразовать скрипт zsh в функцию оболочки zsh

У нас возникла проблема при сборке xpm -3.4k, из-за которой процесс не смог найти -lXt. В CentOS 7 мы сделали следующее :yum install *Xt*.

До этого мы выполнили yum install xorg*dev*, чтобы получить другие сборки для разработки X.

Мы попытались выполнить сборку из исходного кода X, но это оказалось слишком трудоемким. Итак, здорово, что у хороших людей в CentOS есть RPMS для разработки.

3
03.01.2021, 12:17
1 ответ

Я не могу воспроизвести вашу проблему. Но если вы хотите сделать эту функцию автозагружаемой, вам нужно сделать ловушки и переменные локальными для этой функции. Вывод echo -eтакже должен быть отправлен в stderr, как и остальная часть отчета, или добавить эту дополнительную новую строку в вызовеprint:

zmodload zsh/datetime

set -o localtraps
trap true INT QUIT

local TIMEFMT='Total duration: %*E' start end ret duration

strftime -s start 'Start Time: %d/%m/%y %I:%M%P'

{
  duration=$(
    exec 4>&2 2>&1 1>&3 3>&-
    time "$@" 2>&4 4>&-
  )
} 3>&1
ret=$?

strftime -s end 'End Time: %d/%m/%y %I:%M%P'
print -rlu2 '' $start $end $duration
return $ret

Другим вариантом было бы заключить все это в (...), чтобы оно запускалось в подоболочке.

Обратите внимание, что, как уже упоминалось в ответе, на который вы ссылаетесь, поскольку zshtimeсообщает о ресурсах, потребленных процессом (, который в zshне ограничивается истекшим временем и временем процессора, но может включать использование памяти, переключение контекста, операции ввода-вывода... ), его можно использовать только для команд, выполняемых в дочернем процессе. Поэтому, если вы хотите иметь возможность, например, timeдля функции, вам нужно заменить time "$@"на time ("$@"), чтобы функция выполнялась в процессе подоболочки.

Но так как вас интересует только прошедшее время, а не обработка ресурсов, вы можете также использовать другой подход, который я здесь предлагаю, и просто выполнить расчет конечного -времени начала. вручную (и выполните форматирование HH:MM:SS.TTTвручную или с помощью strftime, если хотите ).

2
18.03.2021, 22:38

Теги

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