Dodanie znaczników czasu do monitów terminalu?

53

Zastanawiałem się, czy można dodać znaczniki czasu do monitów terminali, a jeśli tak, to w jaki sposób mogę to osiągnąć?

Jan Gorzny
źródło
sprawdź ten link, aby wyświetlić zsynchronizowany zegar
Mana

Odpowiedzi:

60

Dodaj ten wiersz do ~/.bashrcpliku:

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

Wynik będzie więc taki jak:

[07:00:31] user@name:~$
devav2
źródło
Czasami doświadczam, że czas jest niepoprawny i jest starszy, jakby było jakieś opóźnienie. Pomyślałem, że mogę go użyć, aby sprawdzić, jak długo trwają niektóre polecenia (chrząknięcie ...) Jak to możliwe?
Kevin Simper
2
@ devav2: Czy istnieje sposób na określenie strefy czasowej?
Hippo
Czy istnieje sposób dodania znacznika czasu do terminala, gdy używasz roota? Mam znacznik czasu tylko wtedy, gdy jestem normalnym użytkownikiem. Dzięki
Yufenyuy Veyeh Dider
4
Do datepolecenia, można zastąpić +%H:%M:%Sz +%T.
snapfractalpop
5
To wkręciło moje opakowanie terminala, więc zamiast tego zastosowałem podejście opisane tutaj . Po prostu dodaj „\ D {% T}” do swojego PS1
rbennett485 11.07.16
25

Moim rozwiązaniem było użycie http://bashrcgenerator.com/ do wygenerowania tej linii PS1 do wprowadzenia .bashrc:

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

Jak będzie wyglądać

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

Użycie PROMPT_COMMAND prowadzi dla mnie przegląd historii. Gdy podczas przeglądania historii pojawia się dłuższa linia, odcina ona koniec znaku zachęty taką samą liczbą znaków, jak znacznik czasu dodany z przodu. na przykład

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

Nie można edytować tego wiersza, ponieważ nie wyświetla on znaków we właściwym miejscu, ponieważ nie piszesz tam, gdzie wygląda na to, że piszesz.

Zgaduję, że można to zrobić za pomocą PROMPT_COMMAND, może używając tej części [$ (tput sgr0)], ale PS1 działa.

dogtato
źródło
Link tutaj jest świetny do dalszego dostosowywania znaczków.
cellepo
16

Zamiast dodawać datę do szybkiego siebie, można dodać datę tuż przed swoim wierszu umieszczając następującą linię w górę twoich .bashrc. Aby działało, musisz również zainstalować cowsay. To fajny sposób na wyświetlenie daty z zachowaniem krótkiego monitu:

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

W swojej obecnej formie będzie działać na czyjąś systemu bez poprawek, gdyż czyta $USERi datezmienna z obecnej sytuacji.

wprowadź opis zdjęcia tutaj


źródło
8
Celem wprowadzenia go do monitu jest wiedzieć, kiedy ostatnio wykonałeś określone polecenie.
James Oltmans
6

Ponieważ nie mam wystarczającej liczby punktów reputacji, aby dodać komentarz do odpowiedzi, aby go poprawić. Wydaje się, że jedynym sposobem na dodanie informacji jest utworzenie drugiej odpowiedzi. Powtórzę więc to, co powiedziano jako odpowiedź, i oprę na tym.

Edytuj plik .bashrc dla użytkownika, dla którego chcesz zmodyfikować datownik.

Jeśli widzisz „użytkownik @ host: ~ $”, jesteś w katalogu domowym bieżącego użytkownika. Plik .bashrc jest plikiem ukrytym, ponieważ jest poprzedzony kropką „.”. Aby zobaczyć go na liście, musisz użyć długiej listy.

Możesz użyć „ls -a” i powinieneś zobaczyć plik „.bashrc”.

Edytuj plik za pomocą edytora tekstu. Na przykład „nano .bashrc”, „vim .bashrc”, „vi .bashrc”, „pico .bashrc” lub dowolny inny edytor, którego chcesz użyć.

Jeśli chcesz napisać skrypt i dodać go do wielu powłok dla wielu użytkowników, może być korzystne użycie polecenia „echo” w połączeniu z operatorem „>>”. Na przykład,

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

Jeśli używasz tej metody, upewnij się, że znajdujesz się w bieżącym katalogu roboczym użytkownika, dla którego chcesz ją zmodyfikować. Aby to sprawdzić, możesz użyć polecenia „pwd” lub wydrukować katalog roboczy.

Jeśli nie podoba ci się dodatkowa spacja między końcowym nawiasiem „]” a nazwą użytkownika, użyj tego nieznacznie zmodyfikowanego wyrażenia regularnego:

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

Użyj tego, jeśli bezpośrednio edytujesz plik.

Avlaxis
źródło
1
Możesz sugerować zmiany.
muru
4
export PROMPT_COMMAND=date

drukuje datę przed wydaniem każdego monitu.

wojox
źródło
1

Otwórz swój .bashrcvia

vim ~/.bashrc

a następnie dodaj .bashrc:

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

gdzie \Ajest czas ( \Wtylko koniec ścieżki, usuń, jeśli chcesz całą bieżącą ścieżkę katalogu roboczego). Następnie wpisz

source ~/.bashrc

Zobaczysz coś takiego:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
trwood
źródło
1
usunięcie \Wnie pokaże żadnej ścieżki. \wda pełną ścieżkę.
Zanna
0

Aby dodać do odpowiedzi @ devav2:

Łatwiejszym do odczytania poleceniem echa dla początkujących byłoby:

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

Zamiast

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

Ponieważ polecenie echo nie jest przeznaczone do oceny w czasie eksportu, bardziej sensowne jest stosowanie pojedynczych cudzysłowów zamiast cudzysłowów. Korzystanie apostrofów zacytować całą komendę następnie pozwala na użycie cudzysłowów zacytować arguement do polecenia echo, eliminując potrzebę ucieczki znaków specjalnych, takich jak , [i$

qwertyzw
źródło
1
Do formatowania używane są sekwencje specjalne (w nawiasach). Nie rozumiem, co to dodaje do zaakceptowanej odpowiedzi.
Elder Geek
Możesz dodać je również do „echo -n” $ (data +% H:% M:% S) „”: „echo -n” [$ (data +% H:% M:% S)] ”bez potrzebując uciec. Zaletą używania ciągu jako argumentu polecenia echo jest to, że teraz nie musisz uciec od tego, co w przeciwnym razie można ocenić bash, co ułatwia czytanie.
qwertyzw
@ElderGeek Dodałem dalsze wyjaśnienia. Mam nadzieję że to pomogło.
qwertyzw
0

Myślę, że poprawnym sposobem jest zlokalizowanie w $HOME/.bashrcustawionych kodach PS1, skomentowanie ich i dodanie osobistych. Oto mój blok na przykład:

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

Wynik:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"
Marco Sulla
źródło
0

Najłatwiejszą składnią do wyświetlania znacznika czasu w wierszu polecenia byłoby prawdopodobnie:

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

gdzie

\D{format}data jest sformatowana (patrz man bashsekcja PROMPTING) jako

%Fpełna data; taki sam jak% Y-% m-% d (patrz man datesekcja FORMAT) i

\tto bieżący czas w formacie 24-godzinnym GG: MM: SS (patrz man bashsekcja PROPOZYCJA)

nano ~/.bashrc

wprowadź zmiany do zmiennych PS1, jak pokazano powyżej

source ~/.bashrc
Dmitrij Somow
źródło
0

Mój czas jest podobny do cowsaypowyższej odpowiedzi. Trzeba umieścić nowswoimi ~/.bashrcale można również zadzwonić z terminalu wpisując now.

Oto zrzut ekranu:

now.png

Kod bash jest zamieszczony w tej bardzo szczegółowej odpowiedzi:

WinEunuuchs2Unix
źródło
0
export PROMPT_COMMAND="echo -n \[\$(date +%F-%T)\]\ "
export HISTTIMEFORMAT="%F-%T "

przynajmniej wydaje mi się przydatny.

Alexey Shcherbakov
źródło