这段代码是/build/envsetup.sh文件最后一段代码,搜索了源代码中所有的vendorsetup.sh脚本。
for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
`test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
`test -d product && find -L product -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort`
do
echo "including $f"
. $f
done
这句代码是一个 shell 命令,大致意思是:如果当前目录中存在名为 device
的目录,则在该目录下递归查找深度不超过 4 级的所有文件中,名字为 vendorsetup.sh
的文件,并将find结果按照字母顺序排序。
具体语法解释如下:
-
test -d device
:判断当前目录下是否存在一个名为device
的目录。-d
表示测试对象是一个目录。 -
&&
:如果上一条命令执行成功(即返回值为 0),则执行下面的命令;否则停止执行后续命令。 -
find -L device -maxdepth 4 -name 'vendorsetup.sh'
:在device
目录下查找深度不超过 4 级的,名字为vendorsetup.sh
的文件。各参数含义如下:-
-L
:表示遇到符号链接时,跟随它指向的文件/目录进行操作。 -
device
:要查找的目录。 -
-maxdepth 4
:查找的最大深度为 4 级子目录。 -
-name 'vendorsetup.sh'
:查找文件名为vendorsetup.sh
的文件。
-
-
2> /dev/null
:将标准错误输出重定向到/dev/null
中,如果find
命令发生错误,它的错误信息会被丢弃掉,而不会影响整个管道的执行。 -
| sort
:将查找到的结果按照字母顺序排序。|
表示将前面命令的输出作为后面命令的输入。
| 是将前面find命令的输出还是错误输出以此来作为后面命令的输入?
|
是一个管道符号,它表示将前面命令的标准输出(而不是错误输出)作为后面命令的标准输入。
所以!
在这个代码中,find
命令的标准输出(即查找到的文件路径)将被传递给 sort
命令作为标准输入,并进行排序操作。
那如果我想要把错误输出也给到管道怎么办呢?
在 shell 中,|
表示将前一个命令的标准输出 (stdout)作为后一个命令的标准输入(stdin),并将它们通过管道链接起来。
因此,在这段代码中,find
命令的标准输出(即文件路径)会被传递给下一个命令 sort
的标准输入。管道符号不会将错误输出(stderr)传递给下一个命令。
如果想要将错误输出也一起重定向到管道中,可以使用以下语法:
command1 2>&1 | command2
其中 2>&1
表示将标准错误输出(2)重定向到标准输出(1)中,然后再通过管道传递给下一个命令 command2
。文章来源:https://www.toymoban.com/news/detail-437067.html
在循环中,依次打印路径名称,并source运行所有找到的vendorsetup.sh脚本。文章来源地址https://www.toymoban.com/news/detail-437067.html
到了这里,关于【Shell篇】循环查找某个目录的脚本文件并打印运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!