탭 완성 기능이 있는 PATH에서 와일드카드를 사용하여 명령/파일을 찾는 방법은 무엇입니까?

탭 완성 기능이 있는 PATH에서 와일드카드를 사용하여 명령/파일을 찾는 방법은 무엇입니까?

몇 년 동안 "BASHing"을 한 후 몇 가지 사용자 정의 스크립트를 작성했습니다. 대부분은 매일 사용하지 않기 때문에 가능한 한 일관성을 유지하려고 노력하지만 이름을 어떻게 지정했는지 잊어버리기 쉽습니다.

따라서 내 를 실행할 계획이라면 + FLAC2MP3.bat만 작성하면 Bash가 내 $PATH에서 찾을 수 있는 목록이 있다는 것을 알고 있습니다.FLATABTAB

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

*MP3*동일한 유형의 검색을 수행하면서 내 PATH의 패턴과 일치하는 파일을 검색하기 위해 작성(또는 유사한 것)이 가능합니까 ? 이 글을 쓰고 TAB(한두 번) 누르면 기본적으로 아무 일도 일어나지 않습니다.

내가 시도한 것:

  • 내 문제와는 다르지만 시도해 보았습니다.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

귀하의 주요 질문에 대한 답변은 없지만 귀하의 두 번째 "내가 시도한 것" 프로젝트에 대해 궁금합니다. 지금까지 제가 할 수 있는 최선은 단일 명령(하위 쉘 없음)을 사용하여 수행하는 것입니다. :

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

이는 추악하며 단일 명령/하위 쉘이 노력할 가치가 없다는 것을 증명합니다. 아래 Stephen의 의견을 바탕으로 다음과 같은 작업을 수행할 수 있습니다.

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

편집하다:물론 이것은 경로 구성 요소에 새 줄이 포함된 경우를 처리하지 않지만 누가 신경쓰겠습니까... 우리는 현실 세계에 살고 있습니다. :)

관련 정보