Os utilitários test
e [
internos têm os testes -nt
("mais recentes que") e -ot
("mais antigos") na maioria dos shells, mesmo quando o shell está sendo executado no "modo POSIX" (também válido para os utilitários externos com os mesmos nomes no sistemas aos quais tenho acesso). Esses testes são para comparar registros de data e hora da modificação em dois arquivos. Sua semântica documentada varia ligeiramente nas implementações (com relação ao que acontece se um ou outro arquivo existir ou não), mas eles não estão incluídos na especificação POSIX. para o test
utilitário .
Eles não foram transportados para o
test
utilitário quando o comando condicional foi removido do shell [KornShell] porque não foram incluídos notest
utilitário incorporado nas implementações históricas dosh
utilitário.
Supondo que eu gostaria de comparar o carimbo de data / hora da modificação entre os arquivos em um /bin/sh
script de shell e, em seguida, executar uma ação, dependendo se um arquivo é mais recente que o outro, como em
if [ "$sigfile" -nt "$timestamp" ] ||
[ "$sigfile.tmp" -nt "$timestamp" ]
then
return
fi
... que outro utilitário eu poderia usar, além de make
(o que tornaria o restante do script pesado para dizer o mínimo)? Ou devo apenas assumir que ninguém jamais executará o script em uma "implementação histórica de sh
" ou renunciará a escrever para um shell específico como bash
?
-nt
recurso detest
uma maneira que é esperada desde aprox. 1995. Você deve usar afind
expressão basd, mesmo que combash
um comportamento correto.