머신 A(Oracle Linux Server 버전 6.4 실행)에서는 다음 명령을 사용하여 1개월 전 날짜를 지능적으로 가져올 수 있습니다.
$(date -d"1 month ago" '+%Y0%m')
하지만 머신 B(AIX)에서는 작동하지 않습니다. 이를 달성할 수 있는 다른 방법이 있습니까? .sh
파일 에서 다음을 실행합니다.
sh Test.sh
오류는 컴퓨터 B에 표시됩니다.
date: illegal option -- d
Usage: date [-u] [+Field Descriptors]
답변1
쉘에 관한 것이 아니라 date
명령에 관한 것입니다. 이 옵션은 이 명령의 GNU 구현 -d
에만 적용됩니다 . GNU가 아닌 시스템에서는 GNU 버전을 별도의 패키지(아마도 ... 와 같이 )로 date
설치하지 않으면 작동하지 않습니다 .date
gdate
/opt/gnu/bin/date
ksh93의 최신 버전에는 유사한 기능을 가진 내장 명령이 있습니다 printf
.
printf '%(%Y%m)T\n' '1 month ago'
( zsh
날짜 조작 지원이 내장된 다른 쉘도 참조하십시오( strftime
내장 모듈 zsh/datetime
)).
일부 다른 date
구현에는 날짜 조정 기능도 있습니다. 예를 들어 BSD를 사용하면 date
다음을 수행할 수 있습니다.
date -v -1m +%Y%m
AIX에는 날짜 계산을 수행하는 명령이 포함되어 있고 POSIX 도구 상자에는 명령이 없으므로 표준/이식 가능한 명령이 없다는 사실을 알지 못합니다. 수동으로 복원 perl
하거나 계산할 수 있습니다.
eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 1))
[ "$m" -gt 0 ] || m=12 y=$((y - 1)) # January case
printf '%d%02d\n' "$y" "$m"
답변2
date -d...
AIX/ksh에서는 작동하지 않으므로 AIX에서 완벽하게 작동하는 아래를 사용하십시오.
TZ=aaa$(expr $(expr `TZ=aaa24 date +%d` + 1) \* 24) date +%m