pathchk - パス名の検査
pathchk [-p] path...
pathchk コマンドは、1 つ以上のパス名が有効である (つまり、構文エラーを起こさずにファイルにアクセスしたりファイルを作成したりできる) こと、および移植可能である (つまり、ファイル名の切り捨てが発生しない) ことを検査します。さらに詳細な移植性検査は、–p オプションによって提供されます。
デフォルトでは、pathchk はベースとなるファイルシステムに基づいて、それぞれの path オペランドの各コンポーネントを検査します。次の特徴を持つそれぞれの path オペランドに対して、診断が書き込まれます。
PATH_MAX バイトより長い。
要素として含むディレクトリに、NAME_MAX バイトより長いコンポーネントを含む
ディレクトリに含むいずれかのコンポーネントが検索可能でない
要素として含むディレクトリのいずれかのコンポーネントに、有効でない文字を含む。
診断メッセージの形式は指定されませんが、検出されたエラーおよび対応する path オペランドを示します。
上記で指定したすべての検査に違反しない、欠落したコンポーネントによって指定されるパス名と一致するファイルが作成可能なかぎり、path オペランドの 1 つ以上のコンポーネントが存在しなくてもエラーとはみなされません。
次のオプションがサポートされています。
ベースとなるファイルシステムに基づく検査を実行する代わりに、次の特徴を持つそれぞれの path オペランドに対して診断を書き込みます。
_POSIX_PATH_MAX バイトより長い
_POSIX_NAME_MAX バイトより長いコンポーネントを含む
移植可能なファイル名文字セットに存在しない任意の文字を、いずれかのコンポーネントに含む。
ファイル名が空である場合や、「-」(ハイフン) で始まるコンポーネントが含まれている場合は、エラーメッセージを出力します。
次のオペランドを指定できます。
検査するパス。
インポートされたデータ交換アーカイブ内のすべてのパスが、現在のシステム上で正当かつ明白であることを確認するには、次のようにします。
example% pax -f archive | sed -e '/ == .*/s///' | xargs pathchk if [ $? -eq 0 ] then pax -r -f archive else echo Investigate problems before importing files. exit 1 fi
現在のディレクトリ階層内のすべてのファイルが、X/Open 仕様に準拠し、pax(1) コマンドもサポートするシステムに移動できることを確認するには、次のようにします。
example% find . -print | xargs pathchk -p if [ $? −eq 0 ] then pax -w -f archive . else echo Portable archive cannot be created. exit 1 fi
ユーザー指定のパスによって読み取り可能なファイルが指定されること、およびアプリケーションが所定のパスを拡張して、切り捨てや既存ファイルの上書きを行わずにファイルを作成できることを確認するには、次のようにします。
example% case $- in *C*) reset="";; *) reset="set +C" set -C;; esac test -r "$path" && pathchk "$path.out" && rm "$path.out" > "$path.out" if [ $? -ne 0 ]; then printf "%s: %s not found or %s.out fails \ creation checks.\n" $0 "$path" "$path" $reset # reset the noclobber option in case a trap # on EXIT depends on it exit 1 fi $reset PROCESSING < "$path" > "$path.out"
この例では、次を前提としています。
PROCESSING は、$path.out が意図したとおりに動作することが確認されたあと、$path を使用するアプリケーションによって使用されるコードを表します。
このコードが呼び出されたとき、noclobber オプションの状態は不明で、終了時には、このコードが呼び出された時点の状態に設定する必要があります。(この例では初期状態に復元するために、reset 変数が使用されています。)
次の使用方法に注意してください。
rm "$path.out" > "$path.out"
pathchk コマンドは、$path.out が切り捨てられないことを、この時点ですでに確認しています。
noclobber オプションを設定することで、シェルは rm を呼び出す前に $path.out がまだ存在していないことを検証します。
シェルが $path.out を正しく作成できたら、rm がこれを削除することで、アプリケーションは PROCESSING ステップでファイルをふたたび作成できるようになります。
PROCESSING ステップで、ファイルが呼び出されるときにファイルがすでに存在しているようにするには、次のようにします。
rm "$path.out" > "$path.out"
これを次のものに置き換えます。
> "$path.out"
これにより、ファイルが存在しなかったことが検証されますが、PROCESSING によって使用するための $path.out はそのままにします。
pathchk の実行に影響を与える次の環境変数についての詳細は、environ(7) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。
次の終了ステータスが返されます。
すべての path オペランドはすべての検査に合格しました。
エラーが発生しました。
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|