pathchk - 检查路径名
pathchk [-p] path...
pathchk 命令将检查一个或多个路径名是否有效(即能够在不导致语法错误的情况下用于访问或创建文件)且可移植(即不会造成任何文件名截断)。更丰富的可移植性检查由 –p 选项提供。
缺省情况下,pathchk 将基于底层文件系统检查各 path 操作数的各个组件。将针对每个 path 操作数写入诊断:
长度大于 PATH_MAX 字节。
父目录中包含长度大于 NAME_MAX 字节的任意组件
包含不可搜索的目录中的任意组件
包含在父目录中无效的任意组件的任意字符。
未指定诊断消息的格式,但将指示检测到的错误和对应的 path 操作数。
只要可以创建与缺失组件指定的路径名匹配的文件且不违反上面指定的任意检查项,即便 path 操作数的一个或多个组件不存在,也不应视为错误。
支持以下选项:
不基于底层文件系统执行检查,而是针对每个 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 选项后,shell 将首先验证是否已不存在 $path.out,然后再调用 rm。
如果 shell 已成功创建 $path.out,rm 会将其删除,这样应用程序就能在 PROCESSING 步骤中重新创建该文件。
如果 PROCESSING 步骤希望在其调用时该文件已经存在,那么:
rm "$path.out" > "$path.out"
应替换为:
> "$path.out"
它将验证是否已不存在该文件,但保留 $path.out 供 PROCESSING 使用。
有关影响 pathchk 执行的以下环境变量的说明,请参见 environ(7):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。
将返回以下退出值:
所有 path 操作数均已通过所有检查。
出现错误。
有关下列属性的说明,请参见 attributes(7):
|