現在実行されているスクリプト ファイルの絶対ファイル名を取得したいと思います。リンクも解決する必要があります。
Linux では、これは次のように実行されるようです:
$(readlink -mn "$0")
しかし、readlink
うまくいくようだとてもMac OS X では異なります。
これは次のようにして行われると読んだことがあります
$(realpath $0)
BSD では がありますが、これも動作しません。Mac OS X には がありませんrealpath
。
何か案が?
答え1
私はまさにこのために、ごまかしをして Perl を使用します:
#!/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