No shell script, execute um comando somente se a fonte for mais recente que o destino

0

Estou procurando uma versão simplificada disso:

dep=0
if [ ! -e targetfile ]
then
    dep=1
elif [ targetfile -nt sourcefile ]
then
    dep=1
fi
if [ $dep -eq 0 ]
then
    echo "Already up to date"
    exit 0
fi

Parece que deve haver um comando que teste a existência e a idade do arquivo de origem em uma única instrução. Infelizmente -nt falha no bash se o arquivo de destino não existir. Eu também preciso que ele seja compatível com bash e dash (é por isso que não estou usando && ).

    
por Stephen Ostermiller 11.11.2013 / 22:15

1 resposta

2

Isso deve funcionar tanto no bash quanto no traço:

if [ ! -e targetfile ] || [ targetfile -nt sourcefile ]
then
    echo "Already up to date"
    exit 0
fi

No entanto, parece que você quer algo como make .

Em bash você pode até escrever make -f- <<<'targetfile: sourcefile ;' && exit 0 ,
mas a sintaxe <<< é bash específica, por isso você precisa de echo "targetfile: sourcefile ;" | make -f- && exit 0
ou simplesmente um Makefile real. :)

    
por 11.11.2013 / 22:30