POSIX shで-nt/-otテストを実行する

POSIX shで-nt/-otテストを実行する

組み込みtestおよびユーティリティは、シェルがシステムで「POSIXモード」(同じ名前の外部ユーティリティの場合でも同じ)で実行されている場合でも、ほとんど[のシェルで-nt(「最新」)および(「古い」)テストを持ちます. -ot)にアクセスできます。このテストは、2つのファイルの修正タイムスタンプを比較します。それらが文書化する意味は実装ごとにわずかに異なりますが(1つまたは他のファイルが存在するか存在しない場合に発生することについて)、含まれません。POSIX仕様。test公共施設のため

条件付きコマンドが[KornShell]シェルから削除された場合、ユーティリティ履歴の実装に組み込まれているユーティリティにはtestまだ含まれていないため、ユーティリティに転送されません。testsh

/bin/sh以下のように、シェルスクリプトのファイル間の修正タイムスタンプを比較し、あるファイルが他のファイルより最新であるかどうかに応じてアクションを取るとします。

if [ "$sigfile"     -nt "$timestamp" ] ||
   [ "$sigfile.tmp" -nt "$timestamp" ]
then
    return
fi

... make(これはスクリプトの残りの部分が扱いにくくなることを除いて)どのような他のユーティリティを使用できますか?それとも誰も「歴史的実装」に対してスクリプトを実行しないと仮定する必要がありますか?shそれとも、1つをあきらめる必要がありますか?特定シェルのようなbash

ベストアンサー1

フロント:

f1=/path/to/file_1
f2=/path/to/file_2

if [ -n "$(find -L "$f1" -prune -newer "$f2")" ]; then
    printf '%s is newer than %s\n' "$f1" "$f2"
fi

ファイルへの絶対パスを使用すると、ファイル名に改行のみを含む偽の肯定が防止されます。

相対パスを使用している場合は、findコマンドを次に変更します。

find -L "$f1" -prune -newer "$f2" -exec echo . \;

おすすめ記事