タブ補完機能を持つPATHでワイルドカードを使用してコマンド/ファイルを検索するには?

タブ補完機能を持つPATHでワイルドカードを使用してコマンド/ファイルを検索するには?

数年間「BASHing」を行った後、いくつかのカスタムスクリプトを書いてきました。ほとんどは毎日使用していないので、可能な限り一貫性を維持しようとしますが、名前をどのように指定したかを忘れやすいです。

したがって、私を実行する計画であれば、+をFLAC2MP3.bat書くだけで、Bashが私の$ PATHで見つけることができるリストがあることを知っています。FLATABTAB

FLAC2MP3.bat FLAC2MP3.bat~ FlashPlayerApp.exe FlashPlayerCPLApp.cpl

*MP3*同じタイプの検索を実行しながら、私のPATHのパターンに一致するファイルを検索するために作成(または同様のもの)が可能ですか?この記事を書いてTAB(1、2回)押すと、基本的に何も起こりません。

私が試したこと:

  • 私の問題とは異なりますが、試してみました。Bashオートコンプリートワイルドカードを作成するには?彼らは単に現在のディレクトリの内容の完成に関連しているようですが、私の場合はまったくそうではありません。
  • この回答ほぼ同様の問題(ワイルドカードは含まれていません)の場合は良い考えのようです。findonを使用してください$PATH。プレスほど実用的ではありませんが、TAB解決策かもしれません。しかし、私はほとんど狂気であり、私のPATH(ほとんどのCygwin PATHと同様)のいくつかのディレクトリにスペースが含まれており、拡張子が見つかった場合はfind \'${PATH/:/\' \'}\' -maxdepth 1 -iname mp3 -print -quit一重引用符()を挿入するため、変数の拡張は成功しません。実際、私はこれを行うのに時間がかかりすぎたので、それ自体が問題になることはほとんどありませんでした。

答え1

に切り替える 扱いにくい.zshrc次の行が含まれていることを確認してください。

setopt glob_complete

楽しんでください。

答え2

会議

ls `echo $PATH | sed s@ @\\ @g | sed s@:@ @g` | grep [string]

両方の分野で必要なことを行いますか?空白を含む項目は、読み取り可能なエスケープ空白に置き換える必要があり、項目を区切るsed s@ @\\ @gコロンは通常の空白に置き換える必要があります。これにより、各ディレクトリの内容が個別に一覧表示され、正規表現検索などを認識できます。使用したいワイルドカードです。私が知る限り、これは基本的なBashで動作しますが、CygwinのBashで動作するかどうかはわかりません。$PATHsed s@:@ @g$PATHlsgrep

機能している場合は、いつでもエイリアスを追加して使用が面倒になることがあります。

答え3

あなたの主な質問に対する答えはありませんが、あなたの2番目の「私が試したこと」プロジェクトについて疑問に思います。これまで私ができる最善は、単一のコマンド(サブシェルなし)を使用して行うことです。 :

IFS=: find_path=(${PATH}) && find "${find_path[@]}" <your_find_params>

これは醜く、単一のコマンド/サブシェルが努力する価値がないことを証明します。以下のStephenのコメントに基づいて、次のことを行うことができます。

(IFS=:; set -f; find $PATH <your_find_params>)

編集する:もちろん、これはパスコンポーネントに新しい行が含まれている場合を処理しませんが、誰が気にしますか...私たちは現実の世界に住んでいます。 :)

関連情報