istediğiniz gibi sesler: İşte yapmak ne çalışıyorum bir örnektir Bir betik olarak yürütülür, böylece dizede bu konuma herhangi bir çıktı verilir.
sıklıkla çalıştığı senaryonun dizini oluyor Daha kullanışlı:
aynı yola giderir çünkü nerede komut dosyasını çalıştırdığınızda olursa olsun daha kullanışlı
dot="$(cd "$(dirname "$0")"; pwd)"
path="$dot/some/path"
:
> pwd
~
> ./my_project/my_script.sh
~/my_project/some/path
ziyade:
> pwd
~
> ./my_project/my_script.sh
~/some/path
> cd my_project
> pwd
~/my_project
> ./my_script.sh
~/my_project/some/path
Daha karmaşık ama o zaman ayrıştırmak ve sembolik izlemeniz gerekir (örneğin homebrew aracılığıyla komut dosyalarını yüklerken yaygın) bir sembolik bağla aracılığıyla yürütülen edilmişse çalışan betik dizini gerekirse:
if [[ "$OSTYPE" == *darwin* ]]; then
READLINK_CMD='greadlink'
else
READLINK_CMD='readlink'
fi
dot="$(cd "$(dirname "$([ -L "$0" ] && $READLINK_CMD -f "$0" || echo "$0")")"; pwd)"
Çalışması için daha karmaşık ve daha fazla gereksinim (ör. gnu uyumlu bir readlink bağlantısına sahip olmak zorundayım, bu yüzden onu kullanmayacağımı düşünüyorum. Sadece emin olduğumda, homebrew ile bir komut yüklemek gibi. tüm POSIX uyumlu kabukları mutlak bir yol olarak geçerli dizini içeren özel $PWD
kabuk değişkeni tanımlamak için bir komut yerine pwd
($(...)
) yerleşik kabuk kullanarak
Kabuğunuz nedir? Bazı kabuklar '$ PWD' değişkenini korur, bu nedenle 'pwd' –