Adicionando carimbos de hora nos prompts do terminal?

53

Gostaria de saber se era possível adicionar carimbos de data / hora aos prompts do terminal e, se sim, como conseguir isso?

Jan Gorzny
fonte
verifique esta ligação para exibir relógio funcionando em sincronia
Mana

Respostas:

61

Adicione esta linha ao ~/.bashrcarquivo:

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

Portanto, a saída será algo como:

[07:00:31] user@name:~$
devav2
fonte
Às vezes, experimento que a hora não está correta e é mais antiga, como se houvesse algum tipo de atraso. Eu pensei que eu poderia usá-lo para ver quanto tempo certos comandos levam (grunhido ..). Como pode ser?
precisa
2
@ devav2: Existe uma maneira de especificar o fuso horário?
21415 Hippo
Existe uma maneira de você também poder adicionar registro de data e hora ao terminal quando estiver usando o root? Eu só tenho o carimbo de hora quando sou um usuário normal. Obrigado
Yufenyuy Veyeh Dider
4
Para o datecomando, você pode substituir +%H:%M:%Spor +%T.
snapfractalpop
5
Isso estragou minha embalagem do terminal, então usei a abordagem detalhada aqui . É apenas acrescentar '\ D {% T}' para o seu PS1
rbennett485
25

Minha solução foi usar http://bashrcgenerator.com/ para gerar esta linha PS1 para inserir .bashrc:

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

Qual será a aparência

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

Usar PROMPT_COMMAND atrapalha o histórico para mim. Quando uma linha mais longa aparece ao percorrer o histórico, ela interrompe o final do prompt com o mesmo número de caracteres que o carimbo de data / hora adicionado à frente. por exemplo

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

E essa linha não pode ser editada porque não exibe os caracteres no lugar certo, pois você não está digitando onde parece que está digitando.

Acho que isso poderia ser feito com PROMPT_COMMAND, talvez usando essa parte [$ (tput sgr0)], mas o PS1 funciona.

dogtato
fonte
O link aqui é ótimo para personalizar ainda mais os carimbos.
11286 cellepo
16

Em vez de adicionar a data ao prompt em si, você pode adicionar a data imediatamente antes do prompt, colocando a seguinte linha na parte superior do seu .bashrc. Para isso, você também precisará instalar cowsay. É uma maneira divertida de exibir a data, mantendo um breve aviso:

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

Em sua forma atual, ele funcionará no sistema de qualquer pessoa sem emenda, pois lê $USERa datevariável e do ambiente atual.

insira a descrição da imagem aqui


fonte
8
O objetivo de colocá-lo no prompt é saber quando foi a última vez que você executou um comando específico.
James Oltmans
6

Como não tenho pontos de reputação suficientes para adicionar um comentário à resposta para melhorá-lo. Parece que a única maneira de adicionar informações é criar uma segunda resposta. Então, vou repetir o que foi dito como resposta e desenvolver isso.

Edite o arquivo .bashrc do usuário para o qual você deseja modificar o carimbo de data.

Se você vir "user @ host: ~ $", estará no diretório inicial do usuário atual. O arquivo .bashrc é um arquivo oculto, pois é prefixado com o ponto ".". Para vê-lo em uma lista, você precisará usar uma lista longa.

Você pode usar "ls -a" e deverá ver o arquivo ".bashrc".

Edite o arquivo com um editor de texto. Por exemplo, "nano .bashrc", "vim .bashrc", "vi .bashrc", "pico .bashrc" ou qualquer outro editor que você deseja usar.

Se você deseja criar um script e planejar adicioná-lo a muitos shells para muitos usuários, pode ser benéfico usar o comando "echo" em conjunto com o operador ">>" acrescentado. Por exemplo,

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

Se você usar esse método, verifique se está no diretório de trabalho atual do usuário para o qual deseja modificá-lo. Para verificar isso, você pode usar o comando "pwd" ou imprimir o diretório de trabalho.

Se você não gostar do espaço extra entre o colchete "]" e o nome de usuário, use este regex muito modificado:

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

Use isso se você estiver editando diretamente o arquivo.

Avlaxis
fonte
11
Você pode sugerir edições.
Muru
4
export PROMPT_COMMAND=date

imprime a data antes de emitir cada prompt.

wojox
fonte
1

Abra sua .bashrcvia

vim ~/.bashrc

e adicione o seguinte a .bashrc:

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

onde \Aé o tempo ( \Wsomente para o final do caminho, remova se desejar o caminho inteiro do diretório de trabalho atual). Então digite

source ~/.bashrc

Você verá algo assim:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
trwood
fonte
11
a remoção \Wnão mostrará nenhum caminho. \wdará o caminho completo.
Zanna
0

Apenas para adicionar à resposta de @ devav2:

Um comando de eco mais fácil de ler para iniciantes seria:

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

Ao invés de

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

Como o comando echo não deve ser avaliado no momento da exportação, faz mais sentido usar aspas simples para aspas literais em vez de aspas duplas. Usando aspas simples para citar o comando inteiro, em seguida, permite que você use aspas para citar o argumento para o comando echo, eliminando a necessidade de escapar caracteres especiais como , [e$

qwertyzw
fonte
11
As fugas estão sendo usadas para formatação (os colchetes). Não vejo o que isso acrescenta à resposta aceita.
Elder Geek
Você pode adicioná-los a 'echo -n "$ (data +% H:% M:% S)" "também:' echo -n" [$ (date +% H:% M:% S)] "" sem precisando escapar deles. A vantagem de usar uma string como argumento para o comando echo é que agora você não precisa escapar do que de outra forma pode ser avaliado por bash, facilitando a leitura.
precisa saber é o seguinte
@ElderGeek Adicionei mais esclarecimentos. Espero que ajude.
precisa saber é o seguinte
0

Penso que a maneira correta de proceder é localizar nos $HOME/.bashrccódigos que os definem PS1, comentá-los e adicionar os pessoais. Este é o meu bloco, por exemplo:

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

Resultado:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"
Marco Sulla
fonte
0

A sintaxe mais fácil para mostrar um carimbo de data / hora em um prompt de comando provavelmente seria:

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

Onde

\D{format}é formatado em data (consulte a man bashseção PROMPTING) como

%Fdata completa; igual a% Y-% m-% d (consulte a man dateseção FORMATO) e

\té a hora atual no formato HH: MM: SS de 24 horas (consulte a man bashseção PROMPTING)

nano ~/.bashrc

faça alterações nas variáveis ​​PS1, como mostrado acima

source ~/.bashrc
Dmitry Somov
fonte
0

Meu tempo é semelhante à cowsayresposta acima. Você precisa colocar o nowseu, ~/.bashrcmas também pode chamá-lo no terminal digitando now.

Aqui está uma captura de tela:

now.png

O código bash está publicado nesta resposta muito detalhada:

WinEunuuchs2Unix
fonte
0
export PROMPT_COMMAND="echo -n \[\$(date +%F-%T)\]\ "
export HISTTIMEFORMAT="%F-%T "

pelo menos parece útil para mim.

Alexey Shcherbakov
fonte