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ć?
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
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/)
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
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 )
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.
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.
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
.
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.
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