몇 년 동안 "BASHing"을 한 후 몇 가지 사용자 정의 스크립트를 작성했습니다. 대부분은 매일 사용하지 않기 때문에 가능한 한 일관성을 유지하려고 노력하지만 이름을 어떻게 지정했는지 잊어버리기 쉽습니다.
따라서 내 를 실행할 계획이라면 + FLAC2MP3.bat
만 작성하면 Bash가 내 $PATH에서 찾을 수 있는 목록이 있다는 것을 알고 있습니다.FLA
TABTAB
FLAC2MP3.bat FLAC2MP3.bat~ FlashPlayerApp.exe FlashPlayerCPLApp.cpl
*MP3*
동일한 유형의 검색을 수행하면서 내 PATH의 패턴과 일치하는 파일을 검색하기 위해 작성(또는 유사한 것)이 가능합니까 ? 이 글을 쓰고 TAB(한두 번) 누르면 기본적으로 아무 일도 일어나지 않습니다.
내가 시도한 것:
- 내 문제와는 다르지만 시도해 보았습니다.Bash 자동 완성 와일드카드를 만드는 방법은 무엇입니까?". 그것들은 단지 현재 디렉토리 내용의 완성과 관련된 것 같은데, 제 경우는 전혀 그렇지 않습니다.
- 이 답변거의 비슷한 문제(와일드카드는 포함하지 않음)의 경우 좋은 생각인 것 같습니다.
find
on 을 사용하세요$PATH
. 비록 언론만큼 실용적이지는 않지만 TAB해결책이 될 수도 있습니다. 그러나 나는 거의 미칠 지경이고 내 PATH(대부분의 Cygwin PATH와 마찬가지로)의 일부 디렉토리에 공백이 포함되어 있고 확장이find \'${PATH/:/\' \'}\' -maxdepth 1 -iname mp3 -print -quit
이를 찾으면 작은따옴표( )를 삽입하기 때문에 변수 확장이 성공하지 못합니다. 사실 저는 이 작업을 수행하는 데 너무 많은 시간을 소비했기 때문에 거의 그 자체로 문제가 될 뻔했습니다.
답변1
답변2
회의
ls `echo $PATH | sed s@ @\\ @g | sed s@:@ @g` | grep [string]
두 영역 모두에서 필요한 것을 수행합니까? 공백이 포함된 항목은 읽을 수 있는 이스케이프 공백으로 바꿔야 sed s@ @\\ @g
하며 , 항목을 구분하는 콜론은 일반 공백으로 바꿔야 합니다. 이렇게 하면 각 디렉터리의 내용이 개별적으로 나열되어 정규식 검색 등을 인식할 수 있습니다. 사용하려는 와일드카드입니다. 내가 아는 한 이것은 기본 Bash에서 작동하지만 Cygwin의 Bash에서 작동하는지 확실하지 않습니다.$PATH
sed s@:@ @g
$PATH
ls
grep
작동하는 경우 언제든지 별칭을 추가하여 사용이 덜 번거로울 수 있습니다.
답변3
귀하의 주요 질문에 대한 답변은 없지만 귀하의 두 번째 "내가 시도한 것" 프로젝트에 대해 궁금합니다. 지금까지 제가 할 수 있는 최선은 단일 명령(하위 쉘 없음)을 사용하여 수행하는 것입니다. :
IFS=: find_path=(${PATH}) && find "${find_path[@]}" <your_find_params>
이는 추악하며 단일 명령/하위 쉘이 노력할 가치가 없다는 것을 증명합니다. 아래 Stephen의 의견을 바탕으로 다음과 같은 작업을 수행할 수 있습니다.
(IFS=:; set -f; find $PATH <your_find_params>)
편집하다:물론 이것은 경로 구성 요소에 새 줄이 포함된 경우를 처리하지 않지만 누가 신경쓰겠습니까... 우리는 현실 세계에 살고 있습니다. :)