Eski bir soru, ama zamansız bir soru.
Sürekli gördüğüm çözüm bir $HOME/bin
dizine sahip olmak ve onu ilk sıraya koymak $PATH
( ~/.bashrc
eğer zaten orada değilse, bazı sistemlerde varsayılan ~/bin
olarak 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_SOURCE
kullanılır. $BASH_SOURCE
değ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/bin
ilk önce olduğunu görebiliyoruz $PATH
, böylece ne koyarsam ~/bin
koş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/script
kaynaklar senaryoyu! Sadece çalıştırmak istiyorsanız döneme ihtiyacınız yoktur.