Ваши варианты здесь будут зависеть от вашей оболочки. Там zsh
есть удобная функция ловушки, preexec()
которая вызывается прямо перед любой интерактивной командой оболочки. Создав функцию с этим именем, вы можете заставить вещи выполняться. Вы также можете воспользоваться функцией, precmd()
которая будет запущена непосредственно перед отображением следующего приглашения, которое будет выполнено сразу после завершения вашей команды.
Создав эту пару функций, вы можете иметь любые произвольные команды, которые вы хотите выполнить до и после любых команд, введенных в командной строке. Вы можете использовать это для регистрации использования оболочки, создания блокировок, тестирования среды или для расчета времени или ресурсов, потраченных во время выполнения команды.
В этом примере мы создадим метку времени для эталонного теста перед запуском команды с помощью, preexec()
затем рассчитаем время, потраченное на выполнение команды с помощью, precmd()
и выведем ее перед запросом или выйдем из системы. Пример:
preexec() {
CMDSTART=$(date +%s%N)
}
precmd() {
CMDRUNTIME=$(($(date +%s%N)-$CMDSTART))
echo "Last command ran for $CMDRUNTIME nanoseconds."
}
Примечание: для этого конкретного примера есть еще более простая встроенная функция. Все, что вам нужно сделать, это включить отчеты о времени выполнения в ZSH, и это будет сделано автоматически.
$ export REPORTTIME=0
$ ls -d
./
ls -BF --color=auto -d 0.00s user 0.00s system 0% cpu 0.002 total
В более практической реализации preexec()
я использую его, чтобы увидеть, работает ли оболочка внутри tmux
или, screen
и, если да, для отправки информации о выполняющейся в данный момент команде в восходящем направлении для отображения в имени вкладки.
К сожалению, в bash этот маленький механизм не существует. Вот попытка одного человека повторить это . Также см . Ответ Жиля для подобного изящного маленького взлома.
preexec
, но вы не хотите запускать его внутриpreexec
(напримерpreexec() { time $1; }
), потому что оболочка все еще запускает его послеpreexec
возврата. Поэтому лучшее, что мы можем сделать, это нечто подобное.