Mac OS X의 쉘 스크립트에서 절대 파일 이름을 어떻게 검색할 수 있습니까?

Mac OS X의 쉘 스크립트에서 절대 파일 이름을 어떻게 검색할 수 있습니까?

현재 실행되고 있는 스크립트 파일의 절대 파일명을 알고 싶습니다. 링크도 해결되어야 합니다.

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

관련 정보