在 shell 脚本中,仅当源比目标新时才执行命令

在 shell 脚本中,仅当源比目标新时才执行命令

我正在寻找这个的简化版本:

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

似乎应该有一个命令可以在单个语句中测试源文件的存在性和寿命。不幸的是,-nt如果目标文件根本不存在,bash 就会失败。我还需要它与bashand兼容dash(这就是我当前不使用 的原因&&)。

答案1

这应该在 bash 和 dash 中都有效:

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

然而,你似乎想要类似的东西制作

bash甚至可以编写
make -f- <<<'targetfile: sourcefile ;' && exit 0
<<<语法是 bash 特定的,因此您需要
echo "targetfile: sourcefile ;" | make -f- && exit 0
或只是一个真正的 Makefile。 :)

相关内容