Bashで適切な検索に似た検索を実装する方法

Bashで適切な検索に似た検索を実装する方法

私は以下を使用する「パッケージマネージャ」である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というフォルダがあります。リストしたくないフォルダがZoom1つあります。template

これは他の人がPythonで書いたのと同じプロジェクトです。https://github.com/techcoder20/PiAppsTerminalAdvanced/blob/main/PiAppsTerminalAdvanced.py私がやりたいことを理解するのに役立つと思います。

ベストアンサー1

これが答えとして受け入れられることを願っています。

あなたのアルゴリズムしなければならない例:

  1. 名前に検索文字列を含むディレクトリを探します。見つかったら、ディレクトリ名とcatその説明を印刷します。

たとえば、

for dir in *${SEARCHSTRING}*
do
  echo $dir
  cat "$dir/description"
done
  1. 他のすべてのディレクトリで次を見つけます。説明する検索文字列を含みます。見つかったら上記をご覧ください。

たとえば、

for dir in *
do
  if [[ $dir != *${SEARCHSTRING}* ]]
  then 
    if grep -q "$SEARCHSTRING"
    then 
      echo $dir
      cat "$dir/$SEARCHSTRING"
    fi
  fi
done

2つのループを1つに簡単に組み合わせることができます。注:私はそれらを一緒に投げただけで、テストしたり既存のプログラムに適用したりしませんでした。

あなたのアルゴリズムは何ですか実際にする:

  1. 検索文字列を含むディレクトリを探します。それからcat みんな結果が空の場合でも、この検索結果を説明して把握します。少なくとも2つの望ましくない結果がある。存在しないディレクトリを検索すると、すべての内容が印刷されます。また、検索文字列を含むコメント行のみが印刷されます。
  2. 説明(ディレクトリではなく)に検索文字列が含まれている場合をカバーしていません。

1 つまたは 2 行を変更しても、この問題は解決されません。再設計が必要だと思います。

おすすめ記事