#bash
Вопрос:
Я хочу печатать дату после каждой выполняемой мной команды bash.
Это может помочь мне понять, сколько времени требуется для выполнения команды, когда я нахожусь вдали от клавиатуры.
Я знаю, что мог бы сделать
`DATE=`date %d/%m/%Y %H:%M:%S` amp;amp; echo $DATE`
чтобы узнать дату, но я не знаю, как и даже возможно ли запустить эту команду после каждой команды, которую я выполняю на bash.
Мне также было бы интересно запускать одну и ту же команду перед каждой командой, чтобы я мог знать, сколько времени заняла команда.
Возможно ли это?
Какой файл мне следует отредактировать?
Например:
$ wget google.com
15/07/2017 23:40:05
Я был бы рад, если бы я мог также представить эту следующую особенность:
$ wget google.com
15/07/2017 23:40:05 15/07/2017 23:40:11
Program run for 00:00:06
где первая дата-это когда я запустил программу, вторая-когда программа завершилась, третья-самоочевидна.
Как вы поняли, я не хочу печатать каждый раз
$ wget google.com amp;amp; `DATE=`date %d/%m/%Y %H:%M:%S` amp;amp; echo $DATE`
Комментарии:
1. может быть, это может вам помочь https://unix.stackexchange.com/q/12059
2. Вы также можете включить дату в
PS1
приглашение, чтобы она всегда была перед вами до и после выполнения каждой команды. Вы можете использоватьD{format}
, куда передается форматstrftime(3)
. Очень удобно. Существует также ряд доступных форматов времени.
Ответ №1:
Чтобы выполнить cmd перед каждой введенной командой, установите ловушку при ОТЛАДКЕ. например.
trap date DEBUG
Чтобы выполнить эту команду перед отправкой запроса, установите PROMPT_COMMAND:
PROMPT_COMMAND=date
Комментарии:
1. это круто, но ловушка, похоже, сработала до того, как команда была выполнена.
2. Именно то, чего я хотел. Как я могу заставить PROMPT_COMMAND=дата выполняться каждый раз, когда я открываю терминал по умолчанию? Потому что ваше решение работает, но мне нужно ввести его только ОДИН РАЗ, когда я открываю терминал… Как я могу устранить … ОДИН РАЗ 🙂 Я ленивый!! Действительно, спасибо
3. @f126ck вы поместили его в свой файл .bashrc .
Ответ №2:
Это делает именно это:
PROMPT_COMMAND =
Строка в PROMPT_COMMAND вычисляется после каждой команды. Вам просто нужно добавить команду "Дата" ко всему, что у вас уже было в ней. ( $'n'
(новая строка) - несколько более надежный столяр, чем ;
два последовательных ;
, которые приведут к синтаксической ошибке)
Ответ №3:
Вы можете добавить дату/время в приглашение с помощью PS1
переменной. Вы можете использовать date
команду, но более эффективно использовать поддерживаемые специальные символы, например d
, для даты или D{strftime-fmt}
.
Например:
PS1='u@h[D{%F} D{%T}]w$ '
или, с цветом:
PS1='[33[01;32m]u@h[33[00m][[33[02;33m]D{%F}[33[08m]T[33[00m][33[02;33m]D{%T}[33[00m]][33[01;34m]w[33[00m]$ '
покажет:
user@host[2017-07-16 00:01:17]~/somedir$
Обратите внимание, что во втором случае (с цветом) у нас есть действительная метка времени ISO8601 с "скрытым" разделителем даты и времени T
посередине. Если вы выделите его мышью, T
он будет виден и может быть скопирован. (Также двойным щелчком мыши будет выбрана полная метка времени, а не только дата или время.)
Ответ №4:
Чтобы напечатать метку времени после каждой команды, просто измените приглашение PS1 и добавьте в него дату. Единственная загвоздка здесь в том, что он сообщит вам время, когда команда закончилась и появилось новое приглашение. Поэтому, если у вас долгое время открыта подсказка, просто нажмите enter, чтобы записать время начала перед запуском команды.
PS1="D{%F %T} $ "
Смотрите эту вики-страницу arch или просто настройку подсказки Google bash.
Чтобы добавить время, затраченное на выполнение программы, просто добавьте время перед командой
$ time wget google.com
Это даст вам такой результат
real 0m0.177s
user 0m0.156s
sys 0m0.020s
И вы можете стать еще более ленивым, а для команд, которые вам не хочется вводить каждый раз при их запуске, просто создайте псевдоним.
alias wget="time wget"
Поскольку в bash псевдонимы запускаются перед другими командами, вы можете сделать это таким образом, даже если это выглядит как рекурсия. Тогда вы назовете это так, как привыкли.
И, конечно же, псевдонимы и настройки подсказок могут быть помещены в ваш файл .bashrc, поэтому вам не нужно вводить их каждый раз, когда вы открываете терминал.
n'"date %d/%m/%Y %H:%M:%S"
Строка в PROMPT_COMMAND вычисляется после каждой команды. Вам просто нужно добавить команду «Дата» ко всему, что у вас уже было в ней. ( $'n'
(новая строка) — несколько более надежный столяр, чем ;
два последовательных ;
, которые приведут к синтаксической ошибке)
Ответ №3:
Вы можете добавить дату/время в приглашение с помощью PS1
переменной. Вы можете использовать date
команду, но более эффективно использовать поддерживаемые специальные символы, например d
, для даты или D{strftime-fmt}
.
Например:
или, с цветом:
покажет:
Обратите внимание, что во втором случае (с цветом) у нас есть действительная метка времени ISO8601 с «скрытым» разделителем даты и времени T
посередине. Если вы выделите его мышью, T
он будет виден и может быть скопирован. (Также двойным щелчком мыши будет выбрана полная метка времени, а не только дата или время.)
Ответ №4:
Чтобы напечатать метку времени после каждой команды, просто измените приглашение PS1 и добавьте в него дату. Единственная загвоздка здесь в том, что он сообщит вам время, когда команда закончилась и появилось новое приглашение. Поэтому, если у вас долгое время открыта подсказка, просто нажмите enter, чтобы записать время начала перед запуском команды.
Смотрите эту вики-страницу arch или просто настройку подсказки Google bash.
Чтобы добавить время, затраченное на выполнение программы, просто добавьте время перед командой
Это даст вам такой результат
И вы можете стать еще более ленивым, а для команд, которые вам не хочется вводить каждый раз при их запуске, просто создайте псевдоним.
Поскольку в bash псевдонимы запускаются перед другими командами, вы можете сделать это таким образом, даже если это выглядит как рекурсия. Тогда вы назовете это так, как привыкли.
И, конечно же, псевдонимы и настройки подсказок могут быть помещены в ваш файл .bashrc, поэтому вам не нужно вводить их каждый раз, когда вы открываете терминал.