Você levantou uma questão interessante e fez uma reivindicação que deve ser verificada primeiro.
Eu verifiquei o comportamento de:
$shell -c '[ Makefile -nt SCCS/s.Makefile ] && echo newer'
com várias conchas. Aqui estão os resultados:
-
bash Não funciona - não imprime nada.
-
bosh funciona
-
dash Não funciona - não imprime nada.
-
ksh88 Não funciona - não imprime nada.
-
ksh93 funciona
-
mksh Não funciona - não imprime nada.
-
posh imprime: posh: [: -nt: operador / operando inesperado
-
yash funciona
-
zsh funciona em versões mais recentes , versões mais antigas não imprimem nada
Portanto, quatro dos nove shells suportam o recurso -nt e o implementam corretamente. Corretamente, neste caso, significa que é capaz de comparar os registros de data e hora em plataformas recentes que suportam granularidade de selo de data e hora menor que o segundo . Note que os arquivos que eu selecionei diferem tipicamente apenas alguns microssegundos em seus timestamps.
Como é mais fácil encontrar uma implementação find
em funcionamento, recomendo substituir
if [ "$file1" -nt "$file2" ] ; then
echo newer
fi
por uma expressão baseada em find
.
if [ "$( find "$file1" -newer "$file2" )" ]; then
echo newer
fi
funciona pelo menos enquanto $file1
não contiver apenas novas linhas.
if [ "$( find -L "$file1" -newer "$file2" -exec echo newer \; )" ]; then
echo newer
fi
é um pouco mais lento, mas funciona corretamente.
BTW: Em relação a make não posso falar por todos fazer implementações, mas SunPro Make
suporta comparação de tempo com granularidade de nanossegundos desde aprox. 20 anos, enquanto smake
e gmake
adicionaram esse recurso recentemente.