Data “1 mês atrás” não funcionando no AIX

2

Na máquina A (executando o Oracle Linux Server versão 6.4), posso obter a data de 1 mês atrás de forma inteligente usando o seguinte comando:

$(date -d"1 month ago" '+%Y0%m')

Mas não está funcionando na máquina B (AIX), existe uma maneira alternativa de conseguir isso? Ambos estão em .sh arquivos e são executados com:

sh Test.sh

Erro mostrado na máquina B:

date: illegal option -- d
Usage: date [-u] [+Field Descriptors]
    
por hades 26.02.2016 / 10:57

2 respostas

13

Não tem nada a ver com o shell, mas com o comando date . A opção -d é específica da implementação GNU do comando date . Em sistemas não-GNU, isso não funcionará a menos que você instale a versão GNU de date como um pacote separado (que provavelmente seria instalado como gdate ou como /opt/gnu/bin/date ...).

Note que versões recentes do ksh93 possuem um recurso similar com o comando printf builtin:

printf '%(%Y%m)T\n' '1 month ago'

(veja também zsh para outro shell com suporte a manipulação de data embutida ( strftime embutido no módulo zsh/datetime )).

Algumas outras implementações de date também possuem recursos para ajustar datas. Por exemplo, com BSD date , você poderia fazer:

date -v -1m +%Y%m

Não estou ciente de que o AIX vem com um comando que faz o cálculo de data e não há nenhum comando no toolchest POSIX, portanto, nenhum comando padrão / portátil para isso. Você pode reverter para perl ou fazer o cálculo manualmente:

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"
    
por 26.02.2016 / 11:04
2

date -d... não funciona no AIX / ksh, portanto, use este abaixo de um, que funciona perfeitamente no AIX:

TZ=aaa$(expr $(expr 'TZ=aaa24 date +%d' + 1) \* 24) date +%m
    
por 18.05.2018 / 17:33