Как я могу автоматически синхронизировать команды в bash?

14

В tcsh, есть переменная time:

   The time shell variable can be set to execute the time builtin command
   after the completion of any process that takes more than a given number
   of CPU seconds.

Как мне это сделать bash?

Эяль
источник

Ответы:

14

Я не думаю, что вы можете достичь точно такого же эффекта без изменения исходного кода bash. Но вы можете приблизиться, надеюсь, достаточно близко для вас.

Вы можете объединить хакерский хук precommand bash и SECONDSпеременную, чтобы показать настенные часы ненавязчивым способом. Вот простая реализация из-за Вилле Лаурикари . Функции timer_startи timer_stopвыполняются непосредственно перед началом команды и непосредственно перед отображением следующего приглашения.

function timer_start {
  timer=${timer:-$SECONDS}
}
function timer_stop {
  timer_show=$(($SECONDS - $timer))
  unset timer
}
trap 'timer_start' DEBUG
PROMPT_COMMAND=timer_stop
PS1='[last: ${timer_show}s][\w]$ '

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

bind '"\C-j": "\C-atime {\C-e;}\C-m"'

Когда вы нажимаете Ctrl+ Jвместо Enterзапуска команды, вы получаете информацию о времени. Переплет Enter(т.е. Ctrl+ M) не рекомендуется, потому что измененная команда иногда будет синтаксически некорректной.

См. Как можно указать время последней команды в командной строке Bash? и автоматически синхронизировать каждую выполненную команду и показывать в приглашении Bash? на переполнение стека для других методов (заметим , однако , что большинство дать только истекшее в режиме реального времени, а не время ЦП).

Жиль "ТАК - перестань быть злым"
источник