나는 다음을 사용하는 "패키지 관리자"인 bash 스크립트를 작성 중입니다.파이 애플리케이션.
애플리케이션을 검색할 수 있도록 검색 기능을 구현하고 싶습니다. 지금 내가 하고 있는 일은 다음과 같습니다(템플릿은 나열하고 싶지 않은 폴더입니다).
#test-search.sh
PI_APPS_DIR="$HOME/pi-apps"
function list-all() {
for dir in $PI_APPS_DIR/apps/*/; do
dirname=$(basename "$dir")
if [[ "$dirname" != "template" ]]; then
echo -e "\n${bold}${inverted}${light_blue}$dirname${normal}"
DESC="${green}$(cat "$dir"/description)${normal}"
echo -e $DESC
fi
done
}
function search() {
for dir in $PI_APPS_DIR/apps/*/; do
dirname=$(basename "$dir")
if [[ "$dirname" != "template" ]]; then
echo "$dirname" | grep "$1"
fi
done
}
# the function is then called like this
if [[ "$1" == "search" ]]; then
#search a app
FIND="$(search "$2")"
list-all | grep "$FIND"
fi
다음과 같이 실행합니다. ( ./test-search.sh search "APP"
응용 프로그램은 검색어입니다.)
일어나는 일은 다음과 같습니다. 검색어가 앱 이름과 설명에 있으면 다음과 같은 결과가 나타납니다.
./test-search.sh search "Q"
QEMU
description.......
하지만 을 사용하면 q
모든 앱이 나열됩니다. 검색어가 애플리케이션 설명에만 나타나는 경우 설명만 인쇄됩니다.
파일 트리는 다음과 같습니다.
~/pi-apps/apps
예를 들어, apps
각 애플리케이션에는 application name이라는 폴더가 있습니다. 나열하고 싶지 않은 폴더가 Zoom
1개 있습니다 .template
다음은 다른 사람이 Python으로 작성한 동일한 프로젝트입니다.https://github.com/techcoder20/PiAppsTerminalAdvanced/blob/main/PiAppsTerminalAdvanced.py내가 하고 싶은 일을 이해하는 데 도움이 될 것 같아요.
답변1
이것이 답변으로 받아 들여지기를 바랍니다.
당신의 알고리즘~해야 한다예:
- 이름에 검색 문자열이 포함된 디렉터리를 찾습니다. 발견되면 디렉토리 이름과
cat
해당 설명을 인쇄하십시오.
예를 들어:
for dir in *${SEARCHSTRING}*
do
echo $dir
cat "$dir/description"
done
- 다른 모든 디렉토리에서 다음을 찾으십시오.설명하다검색 문자열을 포함합니다. 발견되면 위를 참조하세요.
예를 들어:
for dir in *
do
if [[ $dir != *${SEARCHSTRING}* ]]
then
if grep -q "$SEARCHSTRING"
then
echo $dir
cat "$dir/$SEARCHSTRING"
fi
fi
done
두 개의 루프를 하나로 쉽게 결합할 수 있습니다. 참고: 나는 단지 그것들을 함께 던졌을 뿐, 테스트하거나 기존 프로그램에 적용하지 않았습니다.
당신의 알고리즘은 무엇입니까실제로하다:
- 검색 문자열이 포함된 디렉터리를 찾습니다. 그 다음에
cat
모두결과가 비어 있는 경우에도 이 검색 결과를 설명하고 파악합니다. 적어도 두 가지 바람직하지 않은 결과가 있습니다. 존재하지 않는 디렉토리를 검색하면 모든 내용이 인쇄됩니다. 또한 검색 문자열이 포함된 설명 줄만 인쇄됩니다. - 설명(디렉토리가 아닌)에 검색 문자열이 포함된 경우를 다루지 않았습니다.
한두 줄을 변경해도 이 문제는 해결되지 않습니다. 재설계가 필요하다고 생각합니다.