Bakınız: BASH SSS girdisi 28: "Komut dizimin konumunu nasıl belirlerim? Bazı yapılandırma dosyalarını aynı yerden okumak istiyorum."
Herhangi bir çözüm her zaman işe yaramayacaktır:
Genel durumda, bu sorunun çözümü olmadığının farkına varmak önemlidir. Duymuş olabileceğiniz herhangi bir yaklaşım ve aşağıda detaylandırılacak olan herhangi bir yaklaşımın kusurları vardır ve yalnızca belirli durumlarda işe yarayacaktır. Birincisi ve en önemlisi, betiğinizin konumuna bağlı kalmayarak sorunu tamamen önlemeye çalışın!
Çok yeniden kullanılabilir bir araç yazmanız gerekiyorsa , betiğinize parametre olarak doğru yolu seçmek en güvenilir yöntem olacaktır. .
Komut dosyanızın yalnızca belirli kabuklardan çalıştırılacağını ve yalnızca biraz esnekliğin gerekli olduğunu varsayarsak, muhtemelen bu paranoyayı biraz gevşetebilirsiniz. Yine de seçeneklerinize bakmak güzel. İnsanların kullandığı, özellikle sorunlu olan yaygın modeller vardır.
Özellikle, SSS çok yaygın olarak kullanılan $0değişkenden kaçınmanızı önerir :
Okuyan hiçbir şey $0kurşun geçirmez olmayacaktır çünkü $0kendisi güvenilmezdir.
Alternatif olarak $BASH_SOURCEbunun yerine kullanabilirsiniz . Bunun gibi bir şey:
source "${BASH_SOURCE%/*}/act.conf.sh"
Bu çözüme yönelik bazı uyarılar da var. Farklı çözümler arasındaki değiş tokuşları görmek için SSS sayfasına bakın. Düzgün bir şekilde genişlemediğinde kullanışlı bir hata durumu elde ettiğiniz için, sizin için çalışacağı durumlarda cdbirlikte tavsiye ediyor gibi görünüyorlar $BASH_SOURCE.
readlink. Aranacak anahtar kelimeleri belirleyemedi, bu yüzden soruyu burada yayınladı ....