![심볼릭 링크를 통해 Bash 스크립트를 실행할 때 Bash 스크립트의 경로를 어떻게 얻나요? [복사]](https://linux55.com/image/177805/%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%ED%86%B5%ED%95%B4%20Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%96%BB%EB%82%98%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
Bash 스크립트가 심볼릭 링크를 통해 실행될 때 경로를 얻고 싶습니다.
이 경우 $0
is는 심볼릭 링크에 대한 경로 입니다-bash
.BASH_SOURCE
일부 쉘 변수, 내장 쉘 명령 또는 외부 명령을 통해 스크립트 경로를 얻을 수 있습니까?
BASH_SOURCE
스크립트가 여러 수준의 간접 참조(다중 심볼릭 링크)를 통해 실행되는 경우에도 초기 심볼릭 링크에 대한 경로가 항상 보존 됩니까 ?
ls
with를 사용 BASH_SOURCE
하여 항상 스크립트 경로를 검색 할 수 있나요 ?
답변1
realpath
또는 readlink -f
GNU 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