date 명령, 하루나 이틀 전으로 돌아갑니다. 다양한 국기 보기

date 명령, 하루나 이틀 전으로 돌아갑니다. 다양한 국기 보기

저는 OSX와 Ubuntu에서 실행되어야 하는 bash 스크립트를 작성 중입니다. 이 특정 문제가 OS 불일치로 인한 것인지 확실하지 않습니다. 둘 다 bash 임에도 불구하고 두 쉘의 date 명령에 차이가 있을 가능성이 더 높습니까? 어디 보자.

OSX의 bash 쉘에서 이틀 전의 날짜를 인쇄하려면 다음을 수행합니다.

date -v-2d +"%Y"."%m"."%d"

그러나 해당 -v플래그는 Ubuntu bash 쉘에서는 유효하지 않습니다. 대신 다음을 사용하고 있습니다.

date --date="2 days ago" +"%Y"."%m"."%d"

불행히도 --dateOSX bash 쉘에서는 플래그가 인식되지 않습니다.

두 경우 모두에서 작동하는 플래그가 포함된 하나의 명령을 사용하고 싶습니다. 무엇을 시도할 수 있는지 아는 사람이 있습니까?

답변1

date내장이 아닙니다 bash. 이는 시스템 유틸리티이며 OSX와 Linux가 다른 점입니다. OSX는 BSD 도구를 사용하고 Linux는 GNU 도구를 사용합니다. 그것들은 유사하지만 동일하지는 않습니다.

당신이 발견한 대로,OSX에서, 일광 절약 시간을 제어하는 -d​​플래그 date인 반면 Linux에서는 표시 시간을 설정합니다. OSX에서는 -v표시 날짜를 조정하지만 Linux에서는 -v플래그가 잘못된 옵션입니다.

대부분의 경우 BSD와 GNU는 POSIX 표준과의 호환성을 위해 노력합니다. 확인해보면POSIX 표준date하지만 이 경우에는 도움이 되지 않는다는 것을 알 수 있습니다. 즉, 날짜 조정을 위한 구문을 지원하지 않습니다.

코드가 두 플랫폼 모두에서 작동하도록 하려면 다음을 시도해 보세요.

[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

또는 (bash 필요):

[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

답변2

와 함께ksh93(이것은 IMHO보다 훨씬 낫습니다.세게 때리다스크립팅의 경우) 내장 기능을 사용할 수 있습니다 printf. 예:

printf '%(%Y.%m.%d)T' '2 days ago'

관련 정보