Bash 패키지의 cli에서 설치 폴더에 액세스

Bash 패키지의 cli에서 설치 폴더에 액세스

저는 스크립트가 액세스해야 하는 실행 파일과 정적 파일을 포함하는 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-namebincd /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"

관련 정보