PATH
Bir kabuk komut dosyası kullanarak belirli bir programın yolunu bulmam gerekiyor . Yol, daha sonra kendisini aramayan exec*
işlevlerden birine geçirilebilen programın gerçek tam yolu olmalıdır PATH
, örn execv
.
Aynı anda kill
gerçek bir program ve yerleşik bir kabuk olarak kullanılabilen programlar vardır . Bu durumda, gerçek programın tam yoluna ihtiyacım var.
POSIX standardının Bölüm 2.9.1.1, Komut Arama ve Yürütme bölümündePATH
belirtildiği gibi bir program bulabilen birkaç yardımcı program vardır .
Orada which
herhangi bir standardın parçası olmadığı,. Bazı sistemlerde düzenli bir program olabilirken, bazı kabuklar yerleşiktir. Çoğu sistemde ve kabukta kullanılabilir gibi görünüyor, ancak yerleşik bir versiyona sahip kabuklar, çalıştırılabilir yolun yolu yerine yerleşik olanın adını da döndürüyor. Ayrıca herhangi bir şekilde standartlaştırılmamıştır ve herhangi bir çıktıyı iade edebilir ve farklı seçenekler alabilir.
bash# which kill
/usr/bin/kill
dash# which kill
/usr/bin/kill
fish# which kill
/usr/bin/kill
mksh# which kill
/usr/bin/kill
tcsh# which kill
kill: shell built-in command.
zsh# which kill
kill: shell built-in command
Orada whence
hangi bir yerleşik bir kaç kabukları. Ama pek çok mermide mevcut değil. Programlama yolu yerine yerleşik adı da döndürür. -p
Bu davranışı değiştirmek için A'ya geçilebilir.
bash# whence kill
bash: whence: command not found
dash# whence kill
dash: 1: whence: not found
fish# whence kill
fish: Unknown command 'whence'
mksh# whence kill
kill
mksh# whence -p kill
/usr/bin/kill
tcsh# whence kill
whence: Command not found.
zsh# whence kill
kill
zsh# whence -p kill
/usr/bin/kill
command
POSIX: 2008 tarafından belirtilen yerleşik yapı vardır . Ne yazık ki normal komutları ve yerleşikleri de arar ve aynı adda yerleşik bir programın gölgelediği programın yolu yerine yerleşik adını döndürür. Bazı eski mermiler henüz uygulanmadı.
bash# command -v kill
kill
dash# command -v kill
kill
fish# command -v kill
/usr/bin/kill
mksh# command -v kill
kill
tcsh# command -v kill
command: Command not found.
zsh# command -v kill
kill
realpath
enable
, sadece bash
ve tarafından sağlanırzsh
type -p
. Hem bash hem de dash command
, aynı ada sahip bir işlev veya yerleşik olsa bile, gerçek bir yürütülebilir dosyayı çalıştırma komutunu söylemenizi sağlar .
command
fonksiyonların (ve takma adların) atlamasına rağmen Q'nun doğru söylediği gibi yerleşmez . Ve her zaman bir shebang kullanamazsınız çünkü tüm sistemlerde herhangi bir kabuk, hatta bir POSIX kabuğu alan bir yol yoktur.
enable
POSIX'deki veya belirtilmedi, ancak eğer şunu kullanabilirsinizenable -n which
yerleşik için kabuk devre dışı bırakmak içinwhich
.