Добавление меток времени к подсказкам терминала?

53

Мне было интересно, можно ли добавить временные метки к подсказкам терминала, и если да, то как я могу этого добиться?

Ян Горзный
источник
проверьте эту ссылку, чтобы отобразить синхронизированные часы
Mana

Ответы:

61

Добавьте эту строку в ~/.bashrcфайл:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Таким образом, результат будет примерно таким:

[07:00:31] user@name:~$
devav2
источник
Иногда я понимаю, что время не правильное и оно старше, как будто есть какая-то задержка. Хотя я мог бы использовать его, чтобы увидеть, сколько времени займет выполнение определенных команд (хрюканье). Как это может быть?
Кевин Симпер
2
@ devav2: есть ли способ указать часовой пояс?
Бегемот
Есть ли способ, которым вы также можете добавить метку времени в терминал, когда вы используете root? У меня есть только отметка времени, когда я обычный пользователь. Спасибо
Yufenyuy Veyeh Dider
4
Для dateкоманды вы можете заменить +%H:%M:%Sна +%T.
snapfractalpop
5
Это связано с моей терминальной упаковкой, поэтому я использовал подход, подробно описанный здесь . Просто добавьте «\ D {% T}» к вашей PS1
rbennett485
25

Мое решение состояло в том, чтобы использовать http://bashrcgenerator.com/ для генерации этой строки PS1 для добавления в .bashrc:

export PS1="\t [\u@\h \W]\\$ \[$(tput sgr0)\]"

Который будет выглядеть

13:05:54 [chad@work-laptop:~/Downloads]$ ls -al

Использование PROMPT_COMMAND портит историю для меня. Когда при циклическом перемещении по истории появляется более длинная строка, она обрезает конец приглашения тем же количеством символов, что и отметка времени, добавленная вперед. например

13:14:38 [chad@work-laptop:~/Doexport PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\\] "

И эта строка не может быть отредактирована, потому что она не отображает символы в нужном месте, так как вы не печатаете там, где она выглядит, как будто вы печатаете.

Я предполагаю, что это можно сделать с помощью PROMPT_COMMAND, возможно, используя эту часть [$ (tput sgr0)], но PS1 работает.

dogtato
источник
Ссылка здесь отлично подходит для дальнейшей настройки марок.
виолончель
16

Вместо добавления даты в само приглашение, вы можете добавить дату непосредственно перед вашим приглашением, поместив следующую строку в верхней части вашего .bashrc. Для его работы вам также нужно будет установить cowsay. Это интересный способ отображения даты с коротким приглашением:

cowsay "Welcome $USER! It's now $(date '+%A %B %d %Y %r')"

В своем текущем виде он будет работать на любой системе без изменений, поскольку он считывает переменную $USERи dateпеременную из текущей среды.

введите описание изображения здесь


источник
8
Смысл помещения его в приглашение состоит в том, чтобы знать, когда в последний раз вы выполняли определенную команду.
Джеймс Олтманс
6

Поскольку у меня недостаточно очков репутации, чтобы добавить комментарий к ответу, чтобы улучшить его. Казалось бы, единственный способ добавить информацию - создать второй ответ. Итак, я повторю сказанное в качестве ответа и буду опираться на это.

Отредактируйте файл .bashrc для пользователя, для которого вы хотите изменить штамп даты.

Если вы видите «user @ host: ~ $», то вы находитесь в домашнем каталоге вашего текущего пользователя. Файл .bashrc является скрытым файлом, так как перед ним ставится точка «.». Чтобы увидеть его в списке, вам нужно использовать длинный список.

Вы можете использовать «ls -a», после чего вы должны увидеть файл «.bashrc».

Отредактируйте файл с помощью текстового редактора. Например, «nano .bashrc», «vim .bashrc», «vi .bashrc», «pico .bashrc» или любой другой редактор, который вы хотите использовать.

Если вы хотите написать сценарий и запланировать добавление его во многие оболочки для многих пользователей, может быть полезно использовать команду "echo" в сочетании с оператором добавления ">>". Например,

echo "export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"" >> .bashrc

Если вы используете этот метод, убедитесь, что вы находитесь в текущем рабочем каталоге пользователя, для которого вы хотите изменить его. Чтобы проверить это, вы можете использовать команду «pwd» или print рабочей директории.

Если вам не нравится лишний пробел между конечной скобкой "]" и именем пользователя, просто используйте это очень немного измененное регулярное выражение:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"

Используйте это, если вы непосредственно редактируете файл.

Avlaxis
источник
1
Вы можете предложить изменения.
Муру
4
export PROMPT_COMMAND=date

печатает дату перед выдачей каждой подсказки.

wojox
источник
1

Открой свой .bashrcчерез

vim ~/.bashrc

и затем добавьте следующее к .bashrc:

#PS1="[\A \u@\h \W\a]$" 

где \Aвремя ( \Wтолько для конца пути, удалите, если вы хотите полный путь к текущему рабочему каталогу). Затем введите

source ~/.bashrc

Вы увидите что-то вроде этого:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
trwood
источник
1
удаление \Wне покажет пути вообще. \wдаст полный путь.
Занна
0

Просто чтобы добавить к ответу @ devav2:

Более простая для чтения команда echo для новичков будет выглядеть так:

export PROMPT_COMMAND='echo -n "$(date +%H:%M:%S) "'

Вместо

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Так как команда echo не предназначена для оценки во время экспорта, имеет смысл использовать одинарные кавычки для буквальных кавычек, а не двойные кавычки. Использование одинарных кавычек для цитирования всей команды позволяет затем использовать двойные кавычки для цитирования аргумента команды echo, исключая необходимость экранирования специальных символов, таких как , [и$

qwertyzw
источник
1
Экранирование используется для форматирования (скобки). Я не вижу, что это добавляет к принятому ответу.
Старейшина Гик
Вы также можете добавить их в 'echo -n "$ (дата +% H:% M:% S)"': 'echo -n "[$ (дата +% H:% M:% S)]"' без необходимость избежать их. Преимущество использования строки в качестве аргумента для команды echo состоит в том, что теперь вам не нужно избегать того, что в противном случае можно оценить с помощью bash, что упрощает чтение.
qwertyzw
@ElderGeek Я добавил дополнительные разъяснения. Надеюсь, это поможет.
qwertyzw
0

Я думаю, что правильный путь - найти $HOME/.bashrcкоды, которые они устанавливают PS1, прокомментировать их и добавить личные. Это мой блок например:

PS1_DATE="\D{%Y-%m-%d %H:%M:%S}"

if [ "$color_prompt" = yes ]; then
    PS1="[$PS1_DATE \[\e]0; \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[\033[00m\]\[\033[01;34m\]\w \[\033[00m\]\$] "
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='[$PS1_DATE ${debian_chroot:+($debian_chroot)}\w \$] '
    #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Выход:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"
Марко Сулла
источник
0

Самый простой синтаксис для отображения метки времени в командной строке, вероятно, будет:

    PS1='\D{%F} \t $...'

где

\D{format}дата отформатирована (см. man bashраздел «ПРЕДЛОЖЕНИЕ») как

%Fполная дата; такой же как% Y-% m-% d (см. man dateраздел FORMAT), и

\tтекущее время в 24-часовом формате ЧЧ: ММ: СС (см. man bashраздел «ЗАДАНИЕ»)

nano ~/.bashrc

внести изменения в переменные PS1, как показано выше

source ~/.bashrc
Дмитрий Сомов
источник
0
export PROMPT_COMMAND="echo -n \[\$(date +%F-%T)\]\ "
export HISTTIMEFORMAT="%F-%T "

по крайней мере, выглядит удобно для меня.

Алексей Щербаков
источник