Выполняйте команду после каждой команды в bash

#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, поэтому вам не нужно вводить их каждый раз, когда вы открываете терминал.