저는 OSX와 Ubuntu에서 실행되어야 하는 bash 스크립트를 작성 중입니다. 이 특정 문제가 OS 불일치로 인한 것인지 확실하지 않습니다. 두 셸 모두에서 bash임에도 불구하고 두 셸에서 날짜 명령이 다를 가능성이 더 큽니까? 보자.
OSX bash 쉘에서 이틀 전 날짜를 인쇄하려면 다음을 수행합니다.
date -v-2d +"%Y"."%m"."%d"
그러나 이 -v
플래그는 Ubuntu bash 쉘에는 영향을 미치지 않습니다. 대신 우리는 다음을 사용합니다:
date --date="2 days ago" +"%Y"."%m"."%d"
불행하게도 --date
OSX bash 쉘은 이 플래그를 인식하지 못합니다.
두 경우 모두 작동하는 플래그가 있는 명령을 원합니다. 무엇을 시도할 수 있는지 아는 사람이 있습니까?
답변1
date
bash
내장되어 있지 않습니다 . OSX와 Linux의 차이점은 시스템 유틸리티입니다. OSX는 BSD 도구를 사용하고 Linux는 GNU 도구를 사용합니다. 그것들은 유사하지만 동일하지는 않습니다.
당신이 발견한 대로,OSX에서, 일광 절약 시간을 제어하는 플래그 -d
이며 Linux에서는 표시 시간을 설정합니다. date
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
그리고크쉬 93(IMHO, 이게 더 낫네요세게 때리다printf
스크립팅의 경우 다음과 같은 내장 기능을 사용할 수 있습니다 .
printf '%(%Y.%m.%d)T' '2 days ago'