シェルスクリプトは、ソースがターゲットよりも最新の場合にのみコマンドを実行します。

シェルスクリプトは、ソースがターゲットよりも最新の場合にのみコマンドを実行します。

私はこれの単純化されたバージョンを探しています:

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は失敗します。またbash、andと互換性がなければなりません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によって異なりますので、実際のMakefileが必要
です。 :)<<<
echo "targetfile: sourcefile ;" | make -f- && exit 0

おすすめ記事