1

此行在我/etc/rc.sysinit在 linux 上的文件中:

[ -r /proc/mdstat -a -r /dev/md/md-device-map ] && /sbin/mdadm -IRs

我对它实际完成的工作并不感兴趣,而不是语法的工作原理。

4

3 回答 3

2

它测试文件是否存在并且可读(/proc/mdstat),如果是,则执行。/dev/md/md-device-map-r/sbin/mdadm -IRs

方括号是程序的替代名称test(或 Bash 替代名称),它可以测试很多东西,例如文件的存在。这-a是一个逻辑“和”。

有关详细信息,请参阅 中的“条件表达式” man bash

于 2012-11-02T00:02:46.250 回答
1

the[实际上是一个命令名本身,即相当于test命令。所以,man test用来找出是什么-r意思。

根据您的系统,您可能会[在以下位置找到/usr/bin

$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 37000 Oct  5  2011 /usr/bin/[

或者它可能是一个符号链接:

$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 4 Oct  5  2011 /usr/bin/[ -> test

一些 shell 还具有[内置命令(有些甚至[[提供了额外的选项)。不过,与大多数内置命令一样,您也会在文件系统中找到一个实现。

于 2012-11-02T00:02:20.830 回答
1

这表示 :

如果您可以阅读/proc/mdstat并且您/dev/md/md-device-map可以阅读,则运行/sbin/mdadm -IRs

help test

笔记

[[是一个与命令类似(但比[命令更强大)的 bash 关键字。请参阅http://mywiki.wooledge.org/BashFAQ/031http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

除非您正在编写 POSIX sh,否则我们建议使用[[.

于 2012-11-02T00:03:05.743 回答