我只是在研究一个脚本,我找到了这一行。谁能告诉我这条线是做什么的。这是代码行。
[ -r "$PosConfigDir/posconfig.sh" ] && . "$PosConfigDir/posconfig.sh"
Run Code Online (Sandbox Code Playgroud)
它会检查您是否有权r
读取文件$PosConfigDir/posconfig.sh
,在符号链接解析后,然后获取该文件。
它不保证您可以读取该文件。例如,在大多数系统上,[ -r / ]
将返回 true 但您无法读取 /
.
-r
是一个标准的测试操作符。
.
是 Bourne-like shell 的特殊内置命令,它告诉 shell 读取和解释作为参数给出的文件中的代码。source
是csh
. 许多现代的类似 Bourne 的 shell 被理解source
为.
.
对于某些 shell 实现,.
打开或读取文件失败将导致 shell 中止(在输出错误消息后)。-r
在这种情况下,检查可能是为了防止这种情况发生。
为了防止 shell 中止,在 POSIX shell 中,可以有一个替代方法
command . "$PosConfigDir/posconfig.sh"
Run Code Online (Sandbox Code Playgroud)
(尽管上述构造将无法工作,zsh
除非在sh
或ksh
仿真中)
为避免出现错误消息,您需要将 stderr 输出重定向到/dev/null
,但这会产生不必要的副作用,即也会使postconfig.sh
.
一个例子:
$ [ -r /etc/os-release ] && . /etc/os-release
$ printf '%s\n' "$PRETTY_NAME"
Debian GNU/Linux 8 (jessie)
Run Code Online (Sandbox Code Playgroud)
PRETTY_NAME
在/etc/os-release
文件中定义:
$ head -n 1 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
996 次 |
最近记录: |