Ich möchte den absoluten Dateinamen der aktuell ausgeführten Skriptdatei abrufen. Links sollten ebenfalls aufgelöst werden.
Unter Linux scheint dies folgendermaßen zu funktionieren:
$(readlink -mn "$0")
aber readlink
scheint zu funktionierensehranders unter Mac OS X.
Ich habe gelesen, dass dies geschieht mit
$(realpath $0)
in BSD, aber das funktioniert auch nicht. Mac OS X hat nicht realpath
.
Irgendeine Idee?
Antwort1
Ich schummele und verwende Perl genau für Folgendes:
#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
Man könnte meinen, ich würde das gesamte Skript einfach in Perl schreiben, und das tue ich oft, aber nicht immer.
Antwort2
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
Antwort3
Dies verarbeitet Kombinationen von symbolischen Links und funktioniert bei Dateien und Ordnern:
#!/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
}
Aber es unterstützt nicht realpath's --relative-to. Dies würde die Konvertierung erfordern hier beschrieben.
Antwort4
Ein anderer Ansatz:
# Install.
brew install coreutils
# Use the GNU variant.
grealpath --help