![PATH에 매핑된 상위 디렉토리와 함께 상대 경로를 사용하여 스크립트를 호출하는 방법은 무엇입니까?](https://rvso.com/image/1552392/PATH%EC%97%90%20%EB%A7%A4%ED%95%91%EB%90%9C%20%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%99%80%20%ED%95%A8%EA%BB%98%20%EC%83%81%EB%8C%80%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
/usr/bin/vendor/
규칙에 따라 추가되고 PATH
예를 들어 쉘 스크립트가 포함된 폴더가 있습니다 do_something.sh
. 이제 함께 그룹화된 하나 이상의 Perl 스크립트를 추가로 저장하기 위해 하위 폴더를 추가하고 싶습니다. /usr/bin/vendor/some_tool/
왜냐하면 두 스크립트의 목적은 동일하고 Eclipse 프로젝트 파일, 구성 파일 등을 추가로 관리해야 하기 때문입니다. 결국에는 /usr/bin/vendor/some_tool/do_a.pl
및 /usr/bin/vendor/some_tool/do_b.pl
.
때문에 어디서나 PATH
쉽게 호출할 수 있습니다 do_something.sh
. 하지만 some_tool/do_a.pl
같은 방식 으로 호출할 수 있는 방법이 있나요 ? 실제로 some_tool/do_a.pl
해당 상대 경로를 사용하면 내가 작업을 수행하고 있음을 알 수 do_a
있습니다 some_tool
. 상대 dir 구조를 사용하여 구현하고 싶은 표현/명명 규칙과 거의 같습니다.
쉘에서 시도했지만 물론 작동하지 않았습니다. 그러나 아마도 제가 잘못하고 있는 것이 있을 수 있으며 일반적으로 작동해야 합니다. 그러나 나는 그렇게 해서는 안 된다고 생각하며 유일한 해결 방법은 /usr/bin/vendor/some_tool_do_a.sh
모든 인수를 /usr/bin/vendor/some_tool/do_a.pl
.
답변1
매뉴얼 bash
페이지는 다음을 지정합니다.
PATH The search path for commands. It is a colon-separated list of
directories in which the shell looks for commands (see COMMAND
EXECUTION below).
그 다음에는 이렇게 말합니다.
If the name is neither a shell function nor a builtin, and contains no
slashes, bash searches each element of the PATH for a directory con‐
taining an executable file by that name.
따라서 대답은 "아니요, 하려는 작업은 에서 지원되지 않습니다 bash
." 인 것 같습니다.
답변2
아니요, 불가능합니다. 입력한 명령의 모든 항목은 항목 내의 상대 경로가 아닌 절대 경로(첫 번째 문자인 경우) 또는 현재 디렉터리에 대한 상대 경로 /
로 만듭니다 ./
PATH
해결 방법은 모든 스크립트를 다음과 연결하는 것 /usr/bin/vendor/some_tool/
입니다 /usr/bin/vendor/
.
ln [-s] /usr/bin/vendor/some_tool/* /usr/bin/vendor/
하드 링크나 소프트 링크를 사용할 수 있습니다.
스크립트를 호출할 때 항상 동일한 작업 디렉터리(또는 소수의 디렉터리)에 있는 경우 이(또는 각) 디렉터리에서 상대 링크를 만드는 것이 더 간단한 대답일 수 있습니다.
ln -s /usr/bin/vendor/some_tool .
이 경우 심볼릭 링크를 사용해야 합니다.
다른 해결 방법은 이 기능을 수행하기 위해 짧은 이름으로 스크립트를 정의하는 것입니다. 이 스크립트는 다음과 같이 호출합니다.
tl some_tool/do_a.pl
tl
전달된 매개변수를 구문 분석하고 PATH
각 구성 요소에서 스크립트를 찾은 다음 스크립트의 전체 경로를 호출합니다.
답변3
"기본" 스크립트에서 수행하는 작업은 다음과 같습니다.
mydir=$(dirname "$0")
"$mydir/subdir/otherscript"
그런 다음 기본 스크립트는 상대 위치가 변경되지 않도록 함께 이동하는 한 항상 하위를 찾습니다.