Tworzenie zmiennej timestamp w skrypcie bash

Próbuję utworzyć zmienną timestamp w skrypcie powłoki, aby ułatwić logowanie. Chcę utworzyć zmienną na początku skryptu i wydrukować z niej bieżący czas za każdym razem, gdy wystawiam echo $timestamp. Okazało się to trudniejsze niż myślałem. Oto kilka rzeczy, które próbowałem:

timestamp="(date +"%T")" echo drukuje (date +"%T")

timestamp="$(date +"%T")" echo wyświetla Czas inicjalizacji zmiennej.

Inne rzeczy, które próbowałem, to tylko niewielkie zmiany, które nie pracuj lepiej. Czy ktoś wie, jak osiągnąć to, co próbuję zrobić?

Author: fedorqui, 2013-06-12

8 answers

Aby uzyskać bieżący znacznik czasu, a nie czas zdefiniowania stałej zmiennej, sztuką jest użycie funkcji i Nie zmiennej:

#!/bin/bash

# Define a timestamp function
timestamp() {
  date +"%T"
}

# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...

Jeśli nie podoba Ci się format podany przez specyfikator %T możesz połączyć inne specyfikatory konwersji czasu zaakceptowane przez date. Dla GNU date pełna lista tych specyfikacji znajduje się w oficjalnej dokumentacji tutaj: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers

 212
Author: giordano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 22:43:29

Jeśli chcesz uzyskać znacznik czasu Uniksa, musisz użyć:

timestamp=$(date +%s)

%T da Ci tylko czas; tak samo jak %H:%M:%S (via http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)

 417
Author: dchakarov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 13:01:01
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
 30
Author: Girdhar Singh Rathore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-23 17:21:57

Użyj podstawienia polecenia:

timestamp=$( date +%T )
 12
Author: choroba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-12 13:06:11

Możesz użyć

timestamp=`date --rfc-3339=seconds`

To dostarcza w formacie 2014-02-01 15:12:35-05:00

Znaki back-tick (`) spowodują, że to, co znajduje się między nimi, zostanie ocenione i będzie zawierać wynik w linii. date --help ma inne opcje.

 9
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 21:07:36

Format ISO 8601 (2018-12-23T12:34:56) jest bardziej czytelny niż znacznik czasu Uniksa. Jednak na niektórych systemach operacyjnych nie możesz mieć : w nazwach plików. Dlatego polecam użycie czegoś takiego zamiast:

2018-12-23_12-34-56

Możesz użyć następującego polecenia, aby uzyskać znacznik czasu w tym formacie:

date +%Y-%m-%d_%H-%M-%S

Jest to format, którego używało wiele aplikacji. Kolejną miłą rzeczą jest to, że jeśli nazwy plików zaczynają się od tego, możesz sortować je alfabetycznie i będą sortowane według daty.

 6
Author: Caner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 12:25:22

Używam ubuntu 14.04.

Prawidłowy sposób w moim systemie powinien być date +%s.

Wyjście date +%T jest jak 12:25:25.

 5
Author: Sean Lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 04:26:33
timestamp=$(awk 'BEGIN {srand(); print srand()}')

Srand bez wartości używa aktualnego znacznika czasu w większości implementacji Awk.

 1
Author: Steven Penny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 02:15:34