【Shell篇】循环查找某个目录的脚本文件并打印运行

简介: 这段代码是/build/envsetup.sh文件最后一段代码,搜索了源代码中所有的vendorsetup.sh脚本。

这段代码是/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


在循环中,依次打印路径名称,并source运行所有找到的vendorsetup.sh脚本。

目录
相关文章
|
3天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
16 1
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
31 3
|
2天前
|
监控 Shell 应用服务中间件
第十二章 Shell脚本编写及常见面试题(二)
第十二章 Shell脚本编写及常见面试题(二)
|
2天前
|
监控 关系型数据库 Shell
第十二章 Shell脚本编写及常见面试题(一)
第十二章 Shell脚本编写及常见面试题(一)
|
2天前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
2天前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)
|
8天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
32 0
|
9天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
10天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
32 1
|
3月前
|
Shell
删除常规文件及隐藏文件shell脚本
删除常规文件及隐藏文件shell脚本
59 1