저는 Bitbucket의 가장 큰 저장소 5개를 인쇄하고 프로젝트 이름, 저장소 이름 및 크기를 표시하는 셸 스크립트를 작성하려고 합니다. 저장소 구성 파일 예:
[bitbucket] 프로젝트=테스트 저장소=customer_management_test
du 명령의 출력:
du -sh /bbhome/shared/data/repositories/* |sort -h |tail -5
2.0G /bbhome/shared/data/repositories/1792
2.7G /bbhome/shared/data/repositories/3517
3.0G /bbhome/shared/data/repositories/2450
3.1G /bbhome/shared/data/repositories/5703
4.4G /bbhome/shared/data/repositories/2829
REHL Bitbucket 시스템에서 실행하려는 코드는 다음과 같습니다.
du -sh /bbhome/shared/data/repositories/* |sort -h |tail -5
while IFS= read -r line;do
DIR=`echo $line | awk '{print$2}'`
Rep=`cat $DIR/repository-config |grep 'project\|repo' | tr '\n' ' '`
Size=`echo $line | awk '{print $1}' `
echo $Size $Rep
done
그러나 예상한 결과를 얻지 못합니다.
실제:
2.0G /bbhome/shared/data/repositories/1792
2.7G /bbhome/shared/data/repositories/3517
3.0G /bbhome/shared/data/repositories/2450
3.1G /bbhome/shared/data/repositories/5703
4.4G /bbhome/shared/data/repositories/2829
예상(1792년의 예):
2.0G project = TEST repository = customer_management_test
문법에 문제는 없나요?
답변1
첫 번째 줄이 실행되고 du -sh /bbhome/shared/data/repositories/* |sort -h |tail -5
stdout을 통해 결과가 터미널에 인쇄됩니다. 그런 다음 while 루프는 표준 입력(비어 있음)을 반복합니다.
|
파이프에서 루프의 stdin과 stdout까지 또 다른 연결이 필요합니다 .
du -sh /bbhome/shared/data/repositories/* |sort -h |tail -5 |
while IFS= read -r line; do
<stuff with "$line">
done