
私は以下を使用する「パッケージマネージャ」である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
2つのループを1つに簡単に組み合わせることができます。注:私はそれらを一緒に投げただけで、テストしたり既存のプログラムに適用したりしませんでした。
あなたのアルゴリズムは何ですか実際にする:
- 検索文字列を含むディレクトリを探します。それから
cat
みんな結果が空の場合でも、この検索結果を説明して把握します。少なくとも2つの望ましくない結果がある。存在しないディレクトリを検索すると、すべての内容が印刷されます。また、検索文字列を含むコメント行のみが印刷されます。 - 説明(ディレクトリではなく)に検索文字列が含まれている場合をカバーしていません。
1 つまたは 2 行を変更しても、この問題は解決されません。再設計が必要だと思います。