date
não é bash
builtin. É um utilitário do sistema e é algo em que o OSX e o Linux são diferentes. O OSX usa ferramentas BSD enquanto o Linux usa ferramentas GNU. Eles são semelhantes, mas não são os mesmos.
Como você encontrou, no OSX , o sinal -d
to date
controla o horário de verão, enquanto no Linux, define o horário de exibição. No OSX, -v
ajusta a data de exibição, mas, no Linux, o -v
flag é uma opção inválida.
Na maioria das vezes, tanto o BSD quanto o GNU buscam compatibilidade com o padrão POSIX. Se você verificar o padrão POSIX para date
, você verá que não é ajuda neste caso: não suporta qualquer sintaxe para ajustar a data.
Se você quiser que seu código funcione nas duas plataformas, tente:
[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"
Ou (requer bash):
[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"