Eski bir soru, ama zamansız bir soru.
Sürekli gördüğüm çözüm bir $HOME/bindizine sahip olmak ve onu ilk sıraya koymak $PATH( ~/.bashrceğer zaten orada değilse, bazı sistemlerde varsayılan ~/binolarak ilk sırada $PATH). Yürütme için komut dosyalarını buraya bırakmak veya başka bir yerde komut dosyalarına / yürütülebilir dosyalara bağlantılar, sistemi veya diğer kullanıcıları etkilememesi gereken yol sorunlarıyla başa çıkmanın basit yoludur.
Bir komut dosyası , kendi konumuna göre (nadir değil) bulunabilecek ek kaynaklar gerektiriyorsa , envvar $BASH_SOURCEkullanılır. $BASH_SOURCEdeğeri ne olursa olsun, o anda çalışan betiğin kendisine giden mutlak yolu içerir $PWD.
Aşağıdakileri göz önünde bulundur:
ceverett@burrito:~$ echo $PATH
/home/ceverett/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Bunun $HOME/binilk önce olduğunu görebiliyoruz $PATH, böylece ne koyarsam ~/binkoşacak. Adlı bir gösteri komut dosyası var ~/bin/findme:
#!/bin/bash
echo "Running from $BASH_SOURCE"
Bu, çalışan komut dosyasının konumuna giden mutlak yolu elde etmek için kullanılabilir.
ceverett@burrito:~$ findme
Running from /home/ceverett/bin/findme
ceverett@burrito:~$ cd foo
ceverett@burrito:~/foo$ findme
Running from /home/ceverett/bin/findme
ceverett@burrito:~/foo$ cd /
ceverett@burrito:/$ findme
Running from /home/ceverett/bin/findme
. /path/to/scriptkaynaklar senaryoyu! Sadece çalıştırmak istiyorsanız döneme ihtiyacınız yoktur.