심볼릭 링크를 통해 Bash 스크립트를 실행할 때 Bash 스크립트의 경로를 어떻게 얻나요? [복사]

심볼릭 링크를 통해 Bash 스크립트를 실행할 때 Bash 스크립트의 경로를 어떻게 얻나요? [복사]

Bash 스크립트가 심볼릭 링크를 통해 실행될 때 경로를 얻고 싶습니다.

이 경우 $0is는 심볼릭 링크에 대한 경로 입니다-bash .BASH_SOURCE

일부 쉘 변수, 내장 쉘 명령 또는 외부 명령을 통해 스크립트 경로를 얻을 수 있습니까?

BASH_SOURCE스크립트가 여러 수준의 간접 참조(다중 심볼릭 링크)를 통해 실행되는 경우에도 초기 심볼릭 링크에 대한 경로가 항상 보존 됩니까 ?

lswith를 사용 BASH_SOURCE하여 항상 스크립트 경로를 검색 할 수 있나요 ?

답변1

realpath또는 readlink -fGNU coreutils에서 도움이 될 수 있습니다.

$ ls -l foo.sh bar.sh whereami.sh
lrwxrwxrwx 1 ilkkachu ilkkachu  6 Jul 31 19:01 bar.sh -> foo.sh*
lrwxrwxrwx 1 ilkkachu ilkkachu 11 Jul 31 19:01 foo.sh -> whereami.sh*
-rwxr-xr-x 1 ilkkachu ilkkachu 36 Jul 31 19:02 whereami.sh*
$ cat whereami.sh
#!/bin/bash
echo "$BASH_SOURCE"
realpath "$BASH_SOURCE"
$ ./bar.sh
./bar.sh
/tmp/whereami.sh

관련 정보