ビルトインtest
および[
ユーティリティは、シェルが「POSIXモード」で実行されている場合でも、ほとんどのシェルで-nt
(「より新しい」)および-ot
(「より古い」)テストを実行します(同じ名前の外部ユーティリティについても当てはまります)。私がアクセスできるシステム)。これらのテストは、2つのファイルの変更タイムスタンプを比較するためのものです。文書化されたセマンティクスは、実装ごとにわずかに異なります(一方または他方のファイルが存在しない場合に発生することに関して)が、POSIX仕様にtest
は含まれていません。以下のためのユーティリティ。
test
条件付きコマンドが[KornShell]シェルから削除されたとき、test
ユーティリティの歴史的な実装に組み込まれたユーティリティに含まれていないため、ユーティリティに引き継がれませんでしたsh
。
/bin/sh
シェルスクリプト内のファイル間の変更タイムスタンプを比較し、次に、1つのファイルが他のファイルより新しいかどうかに応じてアクションを実行したいと仮定します。
if [ "$sigfile" -nt "$timestamp" ] ||
[ "$sigfile.tmp" -nt "$timestamp" ]
then
return
fi
... make
(スクリプトの残りの部分は控えめに言っても扱いにくくなる)以外に、他にどのユーティリティを使用できますか?または、「歴史的な実装」でスクリプトを実行sh
したり、特定のシェルの作成を辞めたりする人は誰もいないと仮定する必要がありbash
ますか?
-nt
機能を実装していませんtest
。1995. 正しい動作が必要な場合find
でも、basd式を使用する必要がありますbash
。