아직 만족스럽게 해결할 수 없는 흥미로운 문제에 직면했습니다.
두 개의 매개변수가 있는 Notes 명령을 고려해보세요.
note $project $note
이는 단순히 첫 번째 매개변수를 기반으로 프로젝트 아래 $note의 내용을 보관합니다.
이제 일부 데이터를 입력하는 두 개의 프로젝트가 있습니다.
note "projectA" "asdfasdf"
note "projectB" "weradfvsaf"
프로젝트가 거의 없을 때 이것은 훌륭하게 작동합니다. 그런 다음 더 많은 프로젝트가 있었고 아이디어가 생겼습니다. 현재 경로를 사용하여 프로젝트 이름을 결정하십시오.
+~
+~/projects/projectA
+~/projects/projectB/subdir
+~/projects/...
그래서 디렉터리 경로에서 프로젝트 이름을 구문 분석하는 위 함수에 대한 래퍼를 작성했습니다.
이는 여러 경로에 걸쳐 여러 프로젝트를 시작하기 전까지는 훌륭하게 작동합니다.
+~
+~/projects/projectA
+~/projects/projectB/subdir
+~/projects/temp/projectA
+~/test/projectA
이제 내 질문은: 어떻게 계속 게으르게 지낼 수 있습니까? 가장 쉬운 방법은 해당 폴더와 해당 폴더가 있는 모든 하위 폴더에 포함된 프로젝트의 이름만 포함하는 project.rc라는 파일을 만드는 것입니다. 래퍼는 단순히 현재 디렉터리에서 파일을 찾고 파일을 찾을 때까지 디렉터리 트리를 계속 탐색합니다. 그런 다음 파일을 읽고 그에 따라 $project 매개변수가 설정됩니다.
저는 쉘 스크립팅에 익숙하지 않습니다. 누구든지 이 문제에 대한 해결책을 생각해 낼 수 있습니까?
답변1
이렇게 하면 트릭이 수행됩니다.
PPATH=$(while [[ "$PWD" != / && ! -f project.rc ]]; do cd ..; done; echo "$PWD")
그러면 변수에는 PPATH
명령을 호출한 프로젝트의 경로가 포함됩니다. 그런 다음 이를 $PPATH/project.rc
.( /
파일이 상위 디렉토리에 없으면 이 변수가 위치하게 됩니다.)