며칠 전에 실행된 명령을 찾기 위해 재귀 검색을 수행하고 이를 실행하고 싶습니다. 단, 현재 실행 중인 경로가 아닌 이전에 실행했던 경로에서 명령을 실행해야 합니다.
zsh
이 문제를 해결하고 명령을 전체 경로로 변경한 후 현재 경로에서 실행할 수 있습니까 ? 아니면 프로세스를 분기하여 원래 경로로 전환하고 실행한 다음 반환할까요?
답변1
명령이 실행된 원래 디렉터리는 기록에 기록되지 않습니다.
실행하려는 명령 이름을 찾을 수 없을 때 실행되는 후크를 설정할 수 있습니다.command_not_found_handler
. 그러나 당시 업무에 대해 잘 이해하고 있지 않으면 그렇게까지는 큰 도움이 되지 않습니다.
답변2
대부분의 경우 이는 실제로 바람직하지 않은 동작입니다. 일반적으로 명령을 다시 실행할 때는 현재 컨텍스트에서 명령을 실행하는 것입니다. 기록 명령을 실행하고 현재 폴더가 아닌 다른 항목에 대해 작동하게 하면 예상치 못한 부작용이 발생할 수도 있습니다.
나는 다른 접근 방식을 제안합니다. 먼저 특정 위치에서 구체적으로 어떤 명령을 실행해야 하는지 식별한 다음, 왜 그런 것인지 자문하고 표준 모드를 사용하여 수정하세요.
실행 파일과 관련된 경로의 리소스에서 라이브러리를 로드해야 하는 경우
dirname
및 등을 사용하여 해당 리소스를 찾을 수 있는 위치를 알 수 있도록 수정하세요$0
.데이터가 필요한 경우 관련되지 않은 데이터를 재사용할 수 있도록 찾을 수 있는 위치를 보여주는 매개변수를 전달하는 것이 좋습니다.
문제의 원인을 해결할 수 없는 경우 작은 셸 함수나 래퍼 스크립트를 작성하여 시스템에서 발생하는 모든 작업과 독립적으로 실행 파일 환경을 설정하는 것을 고려해 보세요.