bash 스크립트에서 타임 스탬프 변수 만들기


375

로깅을 조금 더 쉽게하기 위해 쉘 스크립트에서 타임 스탬프 변수를 만들려고합니다. 스크립트 시작 부분에 변수를 작성하고 발행 할 때마다 현재 시간을 인쇄하고 싶습니다 echo $timestamp. 생각보다 어렵다는 것이 증명되었습니다. 내가 시도한 몇 가지 사항은 다음과 같습니다.

timestamp="(date +"%T")" 에코가 출력됩니다 (date +"%T")

timestamp="$(date +"%T")" echo는 변수가 초기화 된 시간을 인쇄합니다.

내가 시도한 다른 것은 더 이상 작동하지 않는 약간의 변형입니다. 누구든지 내가하려는 일을 성취하는 방법을 알고 있습니까?

답변:


309

고정 변수가 정의 된 시간이 아닌 현재 타임 스탬프를 얻으려면 변수가 아닌 함수를 사용하는 것이 좋습니다 .

#!/bin/bash

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

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

%T지정자가 제공 한 형식이 마음에 들지 않으면에서 허용하는 다른 시간 변환 지정자를 결합 할 수 있습니다 date. GNU의 date경우 공식 문서에서 https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers 에서 이러한 지정자의 전체 목록을 찾을 수 있습니다.


26
사용 방법에 따라 여전히 명령 대체를 사용해야 echo "$(timestamp): something happened"합니다.
— chepner 2016 년

5
: 포맷에 관해서는, 여기에 가장 자주 형식으로 잘라 내기 및 건조 세트입니다 zxq9.com/archives/795
— zxq9

175
나를 위해, 나는 원했다 date +"%Y-%m-%d_%H-%M-%S"
— Kimball Robinson

3
어떤 이유로 이것은 타임 스탬프를 제공하지 않지만 사이에 ":"가있는 현재 시간을 제공합니다.
— erikbwork

7
나는 많은 사람들이 유닉스 타임 스탬프를 생성하는 방법을 찾고있는이 질문에 도착한다고 생각한다.
— hugesupersuperman

565

유닉스 타임 스탬프를 얻으려면 다음을 사용해야합니다.

timestamp=$(date +%s)

%T당신에게 시간을 줄 것입니다; %H:%M:%S( http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ 를 통해 ) 와 동일


5
그러나이 변수는 변수가 시작된 시간의 값을 유지합니다. 맞습니까?
— lindhe

9
나는 이것이 질문의 제목에 대답하기 때문에 많은 찬사를 받고 있다고 생각하지만 질문 본문에는 대답하지 않습니다 : D OP는 매번 다른 타임 스탬프를 얻고 싶었지만 전체 스크립트에 대해 하나를 저장하려고했습니다.
— fedorqui 'SO 중지 피해'

1
나는 이것을 정확하게 찾아 여기에 왔습니다. 즉 적절한 형식 문자열로 유닉스 타임 스탬프를 얻을 수 있습니다 date. 그러나 나는 또한 "올바른"답변을 상향 조정했다. 나는 그것을 찾지 않았지만 원래 질문에 대한 더 나은 대답이며 나에게도 유용합니다.
— vastsupersuperman

69
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too

1
고마워, 그것이 내가 원했던 것입니다 : 스크립트에서 재사용 할 수있는 변수 인 타임 스탬프! 쉘 구문이 너무 혼란 스럽다.
— Poutrathor

2
밀리 초 부분을 추가하는 경우 +1 이것은 echo $(date +"%Y-%m-%dT%T.%3N%z") 그러나 나는 그것이 맥 터미널에서 동작하지 않습니다. Mac에서 동일한 작업을 수행하는 방법 감사합니다
— kosgeinsky

43

ISO 8601 형식 ( 2018-12-23T12:34:56)은 UNIX 타임 스탬프보다 읽기 쉽습니다. 그러나 일부 OS :에서는 파일 이름을 가질 수 없습니다 . 따라서 대신 다음과 같은 것을 사용하는 것이 좋습니다.

2018-12-23_12-34-56

다음 명령을 사용하여이 형식의 타임 스탬프를 얻을 수 있습니다.

TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`

이것은 많은 응용 프로그램에서 사용하는 형식입니다. 이것에 대한 또 다른 좋은 점은 파일 이름이 이것으로 시작하면 알파벳순으로 정렬 할 수 있으며 날짜순으로 정렬된다는 것입니다.


1
고마워 이것은 내 버전 관리 스크립트에 좋습니다
— Andy

1
TZ=UTC date +...UTC 타임 스탬프를 사용하여이 더 휴대용 만들 수 있습니다
— MichaelChirico

17

우분투 14.04를 사용하고 있습니다.

내 시스템의 올바른 방법은입니다 date +%s.

의 출력 date +%T은 같습니다 12:25:25.


15

명령 대체를 사용하십시오.

timestamp=$( date +%T )

3
이것은 이미 시도한 것이며 변수가 초기화 된 시간 만 인쇄합니다.
— Dan

10
@ dan08 : 변수가 작동하는 방식입니다. 동적 출력을 원하면 기능을 사용하십시오.
— choroba 2016 년

11

당신이 사용할 수있는

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

이것은 형식으로 제공 2014-02-01 15:12:35-05:00

백틱 ( `) 문자는 그 사이에있는 것을 평가하여 결과를 줄에 포함시킵니다. date --help다른 옵션이 있습니다.


1
시간이 얼마나 걸리는지는 화면 출력에 포함되기 직전에 실행되거나 출력 시간이 나열되도록 로그 파일이 실행되어야합니다.
— Bill

2
이것은 출력의 공간으로 인해 타임 스탬프에 이상적인 형식보다 적습니다. 사용법에서 "$ timestamp"라고 인용하면 명령에 두 개의 매개 변수가 표시됩니다. 예를 들어 touch $timestamp두 개의 파일이 생성됩니다.
— harschware

8

최신 버전의 bash외부 프로그램을 호출하지 않아도됩니다 date.

printf -v timestamp '%(%T)T'

%(...)T해당 인수를 UNIX 타임 스탬프로 사용하고 strftime괄호 사이의 -style 형식 에 따라 형식을 지정합니다. 인수는 -1현재 시간 에 해당하며 모호성이 없을 때 생략 할 수 있습니다.


5

그리고 내 동료 유럽인들을 위해 이것을 사용해보십시오.

timestamp=$(date +%d-%m-%Y_%H-%M-%S)

형식은 "15-02-2020_19-21-58"입니다.

변수를 호출하고 다음과 같이 문자열 표현을 얻습니다.

$timestamp

1
코드에 코드 표기법을 사용해보십시오.
— 사오

4
timestamp=$(awk 'BEGIN {srand(); print srand()}')

값이없는 srand는 대부분의 Awk 구현에서 현재 시간 소인을 사용합니다.


나는 이것을 매우 창의적으로 좋아합니다!
— TobiV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.