這段代碼是/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
表示測試對象是一個目錄。 -
&&
:如果上一條命令執(zhí)行成功(即返回值為 0),則執(zhí)行下面的命令;否則停止執(zhí)行后續(xù)命令。 -
find -L device -maxdepth 4 -name 'vendorsetup.sh'
:在device
目錄下查找深度不超過 4 級的,名字為vendorsetup.sh
的文件。各參數(shù)含義如下:-
-L
:表示遇到符號鏈接時,跟隨它指向的文件/目錄進行操作。 -
device
:要查找的目錄。 -
-maxdepth 4
:查找的最大深度為 4 級子目錄。 -
-name 'vendorsetup.sh'
:查找文件名為vendorsetup.sh
的文件。
-
-
2> /dev/null
:將標準錯誤輸出重定向到/dev/null
中,如果find
命令發(fā)生錯誤,它的錯誤信息會被丟棄掉,而不會影響整個管道的執(zhí)行。 -
| sort
:將查找到的結果按照字母順序排序。|
表示將前面命令的輸出作為后面命令的輸入。
| 是將前面find命令的輸出還是錯誤輸出以此來作為后面命令的輸入?
|
是一個管道符號,它表示將前面命令的標準輸出(而不是錯誤輸出)作為后面命令的標準輸入。
所以!
在這個代碼中,find
命令的標準輸出(即查找到的文件路徑)將被傳遞給 sort
命令作為標準輸入,并進行排序操作。
那如果我想要把錯誤輸出也給到管道怎么辦呢?
在 shell 中,|
表示將前一個命令的標準輸出 (stdout)作為后一個命令的標準輸入(stdin),并將它們通過管道鏈接起來。
因此,在這段代碼中,find
命令的標準輸出(即文件路徑)會被傳遞給下一個命令 sort
的標準輸入。管道符號不會將錯誤輸出(stderr)傳遞給下一個命令。
如果想要將錯誤輸出也一起重定向到管道中,可以使用以下語法:
command1 2>&1 | command2
其中 2>&1
表示將標準錯誤輸出(2)重定向到標準輸出(1)中,然后再通過管道傳遞給下一個命令 command2
。文章來源:http://www.zghlxwxcb.cn/news/detail-437067.html
在循環(huán)中,依次打印路徑名稱,并source運行所有找到的vendorsetup.sh腳本。文章來源地址http://www.zghlxwxcb.cn/news/detail-437067.html
到了這里,關于【Shell篇】循環(huán)查找某個目錄的腳本文件并打印運行的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!