
저는 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"
불행히도 --date
OSX 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'