저는 스크립트가 액세스해야 하는 실행 파일과 정적 파일을 포함하는 bash로만 작성된 패키지(weffe)를 만들고 있습니다. 그러나 패키지가 git을 사용하여 복제되거나 data 폴더에 설치된 경우 /usr/bin/weffe
로컬 파일을 사용하여 스크립트를 실행하고 싶습니다 /usr/share/weffe
. 패키지가 명령줄에서 실행되는 경우(예: weffe
터미널에서 실행되는 경우) 바이너리는 /usr/share/weffe
유사한 명령을 실행하거나 셸 변수에 액세스하여 whereis
자체 설치 디렉터리(이 경우)를 알 수 있습니까?
이것이 가능하지 않다면 최선의 선택은 무엇입니까? 제가 고려한 몇 가지 사항은 빌드 중에 설치 디렉터리에 대한 변수를 수동으로 생성하는 Makefile을 만들거나 /usr/share/weffe
해당 위치에서 파일에 액세스하기 전에 하드코딩된 디렉터리가 있는지 확인하는 것입니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
디렉토리에서 weffe
실행 파일을 찾은 다음 해당 디렉토리 에 연결하는 것을 고려하십시오 ./usr/share/weffe/weffe-or-other-name
bin
cd /usr/bin; ln -s ../share/weffe/weffe
스크립트는 이 명령을 사용하여 해당 위치를 찾을 수 있습니다 dirname
. 심볼릭 링크인 경우 심볼릭 링크 경로가 반환됩니다. 따라서 "실제" 경로를 찾으려면 dirname
및 를 조합 하여 사용할 수 있습니다 readlink
.
#!/usr/bin/env bash
# Assuming you have soft linked in the bin dir.
# cd /usr/bin; ln -s ../share/weffe/weffe
# /usr/share/weffe/weffe
script_path="$(dirname "$0")"
# GNU readlink requires a -f argument.
# macOS realink does not require -f argument.
script_real_relative_path="$(readlink "$0")"
echo "script path: $script_path"
echo "script real path: $script_real_relative_path"