Aşağıdaki basit tek gömlekleri deneyin:
Tüm UNIX / OSX / Linux için
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
darbe
dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
Not: Komutlarda, komut seçeneklerinin sonunu belirtmek için çift tire (-) kullanılır, böylece tire veya diğer özel karakterler içeren dosyalar komutu bozmaz.
Not: Bash'te ${BASH_SOURCE[0]}
lehine kullanın $0
, aksi takdirde yol kaynak yaparken kırılabilir ( source
/ .
).
Linux, Mac ve diğer * BSD için:
cd "$(dirname "$(realpath "$0")")";
Not: realpath
varsayılan olarak (Ubuntu gibi) en popüler Linux dağıtımına yüklenmelidir, ancak bazılarında eksik olabilir, bu yüzden yüklemeniz gerekir.
Not: Bash kullanıyorsanız ${BASH_SOURCE[0]}
, lehine kullanın $0
, aksi takdirde kaynak ( source
/ .
) kaynaklanırken yol kesilebilir .
Aksi takdirde böyle bir şey deneyebilirsiniz (mevcut ilk aracı kullanacaktır):
cd "$(dirname "$(readlink -f "$0" || realpath "$0")")"
Linux'a özgü:
cd "$(dirname "$(readlink -f "$0")")"
* BSD / Mac'te GNU okuma bağlantısını kullanma:
cd "$(dirname "$(greadlink -f "$0")")"
Not: Kurmuş olmanız gerekir coreutils
(örn. 1. Homebrew , 2.'yi kurun brew install coreutils
).
Bash
Bash'da bunu elde etmek için Parametre Genişletmelerini kullanabilirsiniz , örneğin:
cd "${0%/*}"
ancak komut dosyası aynı dizinden çalıştırılırsa çalışmaz.
Alternatif olarak bash'da aşağıdaki işlevi tanımlayabilirsiniz:
realpath () {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
Bu işlev 1 argüman alır. Bağımsız değişken zaten mutlak bir yola sahipse, olduğu gibi yazdırın, aksi takdirde $PWD
değişken + dosya adı bağımsız değişkenini ( ./
önek olmadan ) yazdırın .
veya Debian .bashrc
dosyasından alınan sürüm :
function realpath()
{
f=$@
if [ -d "$f" ]; then
base=""
dir="$f"
else
base="/$(basename "$f")"
dir=$(dirname "$f")
fi
dir=$(cd "$dir" && /bin/pwd)
echo "$dir$base"
}
İlişkili:
Ayrıca bakınız:
Mac'te GNU'nun readlink -f davranışını nasıl edinebilirim?