bash 스크립트에 타임스탬프 변수 생성
셸 스크립트에 타임스탬프 변수를 생성하여 로깅을 좀 더 쉽게 하려고 합니다.할 때 하여 발행할 .echo $timestamp
생각보다 어렵네요.을 사용하다
timestamp="(date +"%T")"
" " 。(date +"%T")
timestamp="$(date +"%T")"
는 합니다.
내가 시도해 본 다른 것들은 단지 조금 변형된 것들이지만 더 잘 먹히지 않았다.내가 하려는 일을 어떻게 해낼지 아는 사람?
unix 타임스탬프를 취득하는 경우는, 다음을 사용할 필요가 있습니다.
timestamp=$(date +%s)
%T
'이라고 하면 ''이라고 할 수 있어요.%H:%M:%S
(http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/) 경유)
고정 변수가 정의된 시간이 아닌 현재 타임스탬프를 얻으려면 변수가 아닌 함수를 사용해야 합니다.
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T" # current time
}
# 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
다음 표를 참조하여 다양한 형식의 타임스탬프를 생성할 수 있습니다.
형식/결과 | 명령어 | 산출량 |
---|---|---|
YYY-MM-DD | date -I |
$(date -I) |
YYY-MM-DD_hh:mm:ss | date +%F_%T |
$(date +%F_%T) |
YYYMMDD_hhmmss | date +%Y%m%d_%H%M%S |
$(date +%Y%m%d_%H%M%S) |
YYYMMDD_hhmmss(UTC 버전) | date --utc +%Y%m%d_%H%M%SZ |
$(date --utc +%Y%m%d_%H%M%SZ) |
YYYMMDD_hhmmss(로컬 TZ 포함) | date +%Y%m%d_%H%M%S%Z |
$(date +%Y%m%d_%H%M%S%Z) |
YYYMMSSShhmmss | date +%Y%m%d%H%M%S |
$(date +%Y%m%d%H%M%S) |
YYYMMSShmmssnnnnnnnnnnnnnn | date +%Y%m%d%H%M%S%N |
$(date +%Y%m%d%H%M%S%N) |
YYMMDD_hhmmss | date +%y%m%d_%H%M%S |
$(date +%y%m%d_%H%M%S) |
UNIX epoch 이후의 초수 | date +%s |
$(date +%s) |
나노초만 | date +%N |
$(date +%N) |
UNIX Epoch 이후 나노초 | date +%s%N |
$(date +%s%N) |
ISO8601 UTC 타임스탬프 | date --utc +%FT%TZ |
$(date --utc +%FT%TZ) |
ISO8601 UTC 타임스탬프 + ms | date --utc +%FT%T.%3NZ |
$(date --utc +%FT%T.%3NZ) |
ISO8601 로컬 TZ 타임스탬프 | date +%FT%T%Z |
$(date +%FT%T%Z) |
YYY-MM-DD(단일) | date +%F\(%a\) |
$(date +%F\(%a\)) |
YYY-MM-DD(긴 하루) | date +%F\(%A\) |
$(date +%F\(%A\)) |
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
형식ISO 8601 식((( iso iso)2018-12-23T12:34:56
는, 이 뛰어납니다)., 는 ", OS"를 할 수 .:
을 추천합니다.따라서 대신 다음과 같은 것을 사용할 것을 권장합니다.
2018-12-23_12-34-56
다음 명령을 사용하여 이 형식의 타임스탬프를 가져올 수 있습니다.
TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`
이것은 많은 어플리케이션에서 사용하고 있는 형식입니다.또 다른 장점은 파일 이름이 이 문자로 시작하면 알파벳 순으로 정렬할 수 있으며 날짜별로 정렬됩니다.
유럽인 여러분, 이것을 사용해 보세요.
timestamp=$(date +%d-%m-%Y_%H-%M-%S)
는, 「15-02-198_19-21-58」의 형식을 지정합니다.
변수를 호출하면 다음과 같은 문자열 표현을 얻을 수 있습니다.
$timestamp
많은 답변이 있었지만 찾고 있던 것을 찾을 수 없었습니다.
date +"%s.%3N"
는 다음과 같은 것을 합니다.1606297368.210
명령어 대체 사용:
timestamp=$( date +%T )
ubuntu 14.04를 사용하고 있습니다.
시스템의 올바른 방법은date +%s
.
「 date +%T
~와 12:25:25
.
사용할 수 있습니다.
timestamp=`date --rfc-3339=seconds`
이것은 다음과 같은 형식으로 제공됩니다.2014-02-01 15:12:35-05:00
뒷면 체크(`
의 문자는, 그 에 있는 해, 그 의 문자는, 그 사이에 있는 문자를 평가해, 그 결과를 행에 포함합니다. date --help
에는 다른 옵션이 있습니다.
의 bash
date
:
printf -v timestamp '%(%T)T'
%(...)T
하고, 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닉스」의 「유닛」에 형식을 합니다.strftime
괄호 사이의 -style 형식.의 인수. " " "-1
는 현재 시각에 대응하며 애매모호함이 발생하지 않는 경우는 생략할 수 있습니다.
timestamp=$(awk 'BEGIN {srand(); print srand()}')
값이 없는 srand는 대부분의 Awk 구현에서 현재 타임스탬프를 사용합니다.
요청하신 것보다 조금 더 많으므로 필요에 따라 커스터마이즈할 수 있습니다.
셸 스크립트에 타임스탬프 변수를 생성하려고 합니다...
이 스크립트를 사용하면 변수를 만들 수 있습니다.셸 콘텍스트를 변경할 때 재사용이 가능한지는 잘 모르겠습니다.그래도 될 거야
function timestamp {
TEXT="Date:"
DATE=`date +%Y-%m-%d`
TIME=`date +%H:%M:%S`
ZONE=`date +"%Z %z"`
echo $TEXT $DATE $TIME $ZONE
}
function fulldate {
timevariable=$(timestamp)
echo $timevariable
}
echo "- Output 1:"
timestamp
echo "- Output 2:"
fulldate
echo "- Output 3:"
echo $timevariable
출력:
- Output 1:
Date: 2021-08-12 23:28:08 UTC +0000
- Output 2:
Date: 2021-08-12 23:28:08 UTC +0000
- Output 3:
Date: 2021-08-12 23:28:08 UTC +0000
GNU bash 버전 4.4.23 (1)-release(x86_64-pc-msys)에서 이 기능을 테스트했습니다.
퍼포먼스가 걱정된다면 @chepner의 대답은 확실한 승자입니다.
조금 더 복잡하지만 bash 내장만 사용하여 마이크로 또는 밀리초의 정밀도를 얻을 수도 있습니다.다음으로 밀리초를 포함한 현재의 타임스탬프를 송신하는 함수의 예를 나타냅니다.
timestamp() {
IFS=. read S US <<<$EPOCHREALTIME # Read epoch seconds/microseconds
MS=$((10#$US/1000)) # Convert to milliseconds (interpret in base-10, even with leading 0)
printf '%(%F %T)T.%03i' $S $MS # Emit formatted timestamp
}
TS=$(timestamp) # Invoke function, assign to variable
에 주의:printf
원하는 날짜/시간 형식을 사용하여 형식을 조정할 수 있습니다.
이 작업은 다음 명령어를 사용하여 수행할 수 있습니다.
:checkDate=$(date "+%s")
날짜의 경우 : 형형형날 for for for :checkDate=$(date "+%Y-%m-%d %H:%M:%S")
포크를 피하세요!!!
" " " " " 를 실행해야 .date
★★★★★★★★★★★★★★★★!!
가능하면 bash의 빌트인을 사용합니다.
업데이트 2023
이 질문을 받았을 때 bash 버전은 bash-4.2였습니다.
이 버전에서는 현재 시간을 인쇄하기 위한 순수한 bash 방법은 다음과 같습니다.
printf '%(%T)T\n' -1
아니면
printf '%(%T)T\n' -1
따라서 각 행에 타임스탬프를 사용하여 짧은 함수로 로그인할 수 있습니다.
logLine() {
printf '%(%T)T %s\n' -1 "$*"
}
그리고나서
$ logLine Hello world.
10:11:32 Hello world.
오늘은 bash-5.1.4를 사용합니다.
버전 5.0-alpha of bash, (2018-05-22) 이후:
b. EPOCHSEConds 변수가 있으며, 이는 Unix Epoch 이후 초 단위로 확장됩니다.
c. EPOCHREALTIME 변수가 있습니다.이는 Unix epoch 이후 초 단위로 마이크로초 단위로 확장됩니다.
따라서 마이크로초의 세분화를 사용하는 경우 다음과 같은 기능을 사용할 수 있습니다.
logLine() {
local now=$EPOCHREALTIME
printf '%(%T)T.%s %s\n' ${now%.*} ${now#*.} "$*"
}
그리고나서
$ logLine Hello world.
10:15:56.862732 Hello world.
중요: EPOCHREALTIME과 EPOCHSECONDS를 혼재시키지 마세요!!!
GNU bash, 버전 4.4.20 (1)-release(x86_64-pc-linux-gnu)의 타임스탬프 포맷 트릭
echo "$(date +%Y-%m-%d_%H:%M:%S.%6N) Info >>> enter main"
출력:
2023-01-08_23:08:48.013592 Info >>> enter main
'_'를 공백으로 바꾸려면 다음을 수행합니다('\'에 오류 메시지가 표시됨).
echo "$(date +%Y-%m-%d\ %H:%M:%S.%6N) Info >>> enter main"
echo "$(date +%Y-%m-%d\ %T.%6N) Info >>> enter main"
출력:
2023-01-08 23:10:40.692674 Info >>> enter main
다음은 로컬 날짜와 시간을 제공합니다. 단, 인터넷 접속이 필요합니다.로그에 기록되는 항목에 따라서는 접속 상태를 감시하고 기록하는 것이 유리할 수 있습니다.
curl -i --silent https://google.com/ 2>&1 | grep date
date: Fri, 03 Jun 2022 17:39:19 GMT
언급URL : https://stackoverflow.com/questions/17066250/create-timestamp-variable-in-bash-script
'programing' 카테고리의 다른 글
Windows 배치 파일: .bat vs .cmd? (0) | 2023.04.19 |
---|---|
마스터 데이터베이스에 기록된 데이터베이스 소유자 SID가 데이터베이스 소유자 SID와 다릅니다. (0) | 2023.04.19 |
"shallow" 복사 사전을 업데이트하면 "original" 사전이 업데이트되지 않는 이유는 무엇입니까? (0) | 2023.04.19 |
Postgre에 작은 따옴표로 텍스트를 삽입합니다.SQL (0) | 2023.04.19 |
Items Control을 가상화하시겠습니까? (0) | 2023.04.19 |