나는 탈출의 도전에 직면했습니다:
프로세스:
1단계 - 파일 검색: Bash에서는 find 명령이 호출됩니다.
Find 명령의 출력은 다음 경로를 가진 단일 파일입니다.
./vacation/the united states/"best times of our lives"/persona notes.org
노트:
• 경로 내
"
문구를 묶기 위해 큰따옴표가 두 번 나타납니다.best times of our lives
대부분의 하위 디렉터리에는 1개 이상의 공백 문자가 포함되어 있습니다.
• 파일명 내에서
- 또한 1개 이상의 공백 문자가 나타납니다.
2단계 - 해당 find 명령 결과를 참조하여 찾은 1개 파일에 액세스하여 bash에서 Emacs를 시작합니다.
까다로운 길만 통과하면 이렇게 됩니다.
$ emacs -nw './vacation/the united states/"best times of our lives"/persona notes.org'
emacs는 bash에서 시작되고 화면의 표시는 bash 내용에서 문제의 파일 내용을 포함하는 Emacs 버퍼로 전환됩니다.
이제 마지막 질문은: 처음에 언급한 find 명령 출력을 bash의 emacs 명령에 제공하여 이를 정확히 어떻게 달성할 수 있습니까?
일반적으로 말하면 대체 방법이 사용됩니다.
$ emacs -nw $(find ./vacation/ -mmin -700 -type f -iname *.org)
그러나 문자 그대로의 대안은
./vacation/the united states/"best times of our lives"/persona notes.org
결과 라인
$ emacs -nw ./vacation/the united states/"best times of our lives"/persona notes.org
공백 문자와 큰따옴표는 이스케이프되어야 합니다.
하지만 어떻게?
•$ emacs -nw '$(find ./vacation/ -mmin -700 -type f -iname *.org)'
- 작동하지 않음: Emacs는 bash에서 시작하지만
-mmin -700 -type f -iname *.org)
"이러한 파일이 존재하지 않으므로 버퍼가 비어 있습니다"라는 버퍼를 설정합니다.
• 작은따옴표를 큰따옴표로 바꾸는 것도 작동하지 않습니다.
$ emacs -nw "$(find ./vacation/ -mmin -700 -type f -iname *.org)"
- 시도 해봐…일하다혼란스러워요! 그것은 작동합니다
- 글쎄, 그거 알아? 이것이 바로 제가 해킹을 중단하고 다른 접근 방식을 취한 이유입니다. 문제를 묻고 솔루션 제안을 위해 설명하는 것입니다.
- 따라서 이 모든 것을 특히 특정 문제와 그 해결책에 대한 제시로, 그리고 일반적으로 당신 앞에 놓인 문제를 해결하는 방법에 대한 영감으로 고려하십시오. 한 걸음 물러서서 추구하는 다른 방법을 시도하십시오. 다른 사람의 조언, 다른 사람에게 문제 설명, 자신에게 질문하기, 처음에 하지 않았던 일을 하는 것은 매우 도움이 될 수 있으며 현재의 한계를 극복하는 방법입니다.
- "적절한 -exec 옵션을 통해 해당 find 호출의 확장자로 발견된 파일을 열면 어떨까요?"라고 자문할 수 있습니다. 그러면 프로세스는 emacs 호출이 아니라 찾기 호출이 됩니다. Emacs에 대한 액세스는 더욱 악화됩니다. 예를 들어, 이전에 일시 중지된 현재 emacs 세션을 재개하기 위해 설정한 별칭은 작업 목록에 찾기 작업(emacs 작업 포함)만 포함되어 있지만 별칭은 별도의 emacs 작업에 의존하기 때문에 작동하지 않습니다.
답변1
사용 find
및 xargs
:
find ... -print0 | \
xargs -0 --no-run-if-empty -n 1 \
emacs -nw
(server-start)
이것을 Emacs 시작 파일에 추가하면 ~/.emacs
다른 창에서 한 번 시작한 emacs
다음 이를 사용하여 emacsclient
훨씬 적은 오버헤드로 원하는 파일을 열 수 있습니다.
읽다 man find xargs emacsclient emacs
.