date 명령은 하루 또는 이틀을 반환합니다. 다른 깃발 보기

date 명령은 하루 또는 이틀을 반환합니다. 다른 깃발 보기

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

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

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

그러나 이 -v플래그는 Ubuntu bash 쉘에는 영향을 미치지 않습니다. 대신 우리는 다음을 사용합니다:

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

불행하게도 --dateOSX bash 쉘은 이 플래그를 인식하지 못합니다.

두 경우 모두 작동하는 플래그가 있는 명령을 원합니다. 무엇을 시도할 수 있는지 아는 사람이 있습니까?

답변1

datebash내장되어 있지 않습니다 . OSX와 Linux의 차이점은 시스템 유틸리티입니다. OSX는 BSD 도구를 사용하고 Linux는 GNU 도구를 사용합니다. 그것들은 유사하지만 동일하지는 않습니다.

당신이 발견한 대로,OSX에서, 일광 절약 시간을 제어하는 ​​플래그 -d이며 Linux에서는 표시 시간을 설정합니다. dateOSX에서는 -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

그리고크쉬 93(IMHO, 이게 더 낫네요세게 때리다printf스크립팅의 경우 다음과 같은 내장 기능을 사용할 수 있습니다 .

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

관련 정보