Saya perlu menemukan jalur program yang diberikan pada PATH
menggunakan skrip shell. Path harus path lengkap aktual dari program, yang dapat diteruskan kemudian ke salah satu exec*
fungsi, yang tidak mencari PATH
sendiri, misalnya execv
.
Ada beberapa program seperti kill
, yang tersedia sebagai program aktual dan shell built-in pada saat bersamaan. Jika ini kasusnya, saya perlu path lengkap ke program yang sebenarnya.
Ada beberapa utilitas yang dapat menemukan program pada PATH
sebagaimana ditentukan dalam Bagian 2.9.1.1, Pencarian Perintah dan Eksekusi standar POSIX .
Ada which
, yang bukan bagian dari standar apa pun. Ini bisa menjadi program reguler pada beberapa sistem, sedangkan beberapa shell memberikannya builtin. Tampaknya tersedia di sebagian besar sistem dan shell, tetapi shell dengan versi builtin, juga hanya mengembalikan nama built-in alih-alih jalur ke executable. Juga tidak dibakukan dengan cara apa pun dan dapat mengembalikan output apa pun dan mengambil opsi yang berbeda.
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
Ada whence
, yang merupakan built-in dari beberapa cangkang. Tetapi tidak tersedia pada banyak kerang. Itu juga akan mengembalikan nama built-in bukan path ke program. A -p
dapat diteruskan ke mana untuk mengubah perilaku ini.
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
Ada command
builtin yang ditentukan oleh POSIX: 2008 . Sayangnya itu juga mencari perintah reguler dan built-in dan akan mengembalikan nama built-in bukan path ke program yang dibayangi oleh built-in dengan nama yang sama. Beberapa shell lama belum mengimplementasikannya.
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
hanya disediakan oleh bash
danzsh
type -p
. Baik bash dan dash membiarkan Anda mengatakan command
perintah untuk menjalankan executable yang sebenarnya bahkan jika ada fungsi atau builtin dengan nama yang sama.
command
melewatkan fungsi (dan alias) tetapi BUKAN bawaan, seperti yang dikatakan Q dengan benar. Dan Anda tidak dapat selalu menggunakan shebang karena tidak ada jalur yang mendapatkan shell yang diberikan, atau bahkan beberapa shell POSIX, di semua sistem.
enable
dispesifikasikan dalam POSIX atau tidak, tetapi jika ya, Anda dapat menggunakanenable -n which
untuk menonaktifkan shell bawaan untukwhich
.