Wil*_*ard 3 bash string shell-script filenames posix
我想检查 shell 变量是否包含绝对路径。
我不在乎路径是否存在——如果它不存在,我将创建它——但我确实想确保我正在处理一个绝对路径名。
我的代码如下所示:
myfunction() {
[ magic test to see if "$1" is an absolute path ] || return 1
mkdir -p "$(dirname "$1")" || return 1
commands >> "$1"
}
Run Code Online (Sandbox Code Playgroud)
或者,要验证的绝对路径是目录的用例:
anotherfunction() {
[ same magic test ] || return 1
mkdir -p "$1"
dostuff >> "$1/somefile"
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,awk
我会像这样进行检查:myvar ~ /^\//
还有必须是干净的方式与外壳的字符串处理要做到这一点,但我有想出它的麻烦。
(提及一个bash
特定的解决方案会很好,但我想知道如何以可移植的方式执行此操作。POSIX 字符串处理似乎应该足够了。)
[ "$1" != "${1#/}" ] || return 1
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法(这就是我问的原因)。此代码剥去任何前导/
在$1
和检查的结果是不一样$1
本身。
你可以这样做:
case $1 in (/*) pathchk -- "$1";; (*) ! : ;; esac
Run Code Online (Sandbox Code Playgroud)
那应该就够了。它会将诊断写入 stderr 并返回无法访问或无法创建的组件的故障。pathchk
不是关于现有的路径名——而是关于可用的路径名。
该
pathchk
实用程序应检查一个或多个路径名是否有效(即,它们可用于访问或创建文件而不会导致语法错误)和可移植性(即,不会导致文件名截断)。该-p
选件提供了更广泛的便携性检查。默认情况下,该
pathchk
实用程序应pathname
根据底层文件系统检查每个操作数的每个组件。应为每个pathname
操作数编写诊断:
长于
{PATH_MAX}
字节(参见<limits.h> 中的路径名变量值 )
{NAME_MAX}
在其包含目录中包含长于字节的任何组件包含目录中不可搜索的任何组件
包含在其包含目录中无效的任何组件中的任何字符
诊断消息的格式没有规定,但应指明检测到的错误和相应的
pathname
操作数。如果
pathname
操作数的一个或多个组件不存在,只要pathname
可以创建与缺失组件指定的文件匹配的文件,并且不违反任何上述指定的检查,则不应将其视为错误。
归档时间: |
|
查看次数: |
8584 次 |
最近记录: |