현재 실행되고 있는 스크립트 파일의 절대 파일명을 알고 싶습니다. 링크도 해결되어야 합니다.
Linux에서는 다음과 같이 수행되는 것 같습니다.
$(readlink -mn "$0")
하지만 readlink
작동하는 것 같습니다매우Mac OS X에서는 다르게 작동합니다.
나는 이것이 다음을 사용하여 수행된다는 것을 읽었습니다.
$(realpath $0)
BSD에서는 작동하지 않습니다. Mac OS X에는 realpath
.
어떤 아이디어?
답변1
나는 바로 이 일을 위해 펄을 속이고 사용합니다:
#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
여러분은 제가 전체 스크립트를 Perl로 작성한다고 생각하실 것입니다. 종종 그렇게 하지만 항상 그런 것은 아닙니다.
답변2
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
답변3
이는 심볼릭 링크 콤보를 처리하며 파일과 폴더에서 작동합니다.
#!/usr/bin/env bash
realpath()
{
if ! pushd $1 &> /dev/null; then
pushd ${1##*/} &> /dev/null
echo $( pwd -P )/${1%/*}
else
pwd -P
fi
popd > /dev/null
}
그러나 realpath의 --relative-to는 지원하지 않습니다. 이렇게 하려면 변환이 필요합니다. 여기에 설명되어 있습니다.
답변4
또 다른 접근법:
# Install.
brew install coreutils
# Use the GNU variant.
grealpath --help