Saya perlu melakukan ini hari ini dan menemukan bahwa whence -v
mengeluarkan file yang berisi definisi fungsi.
$ whence -v function_name
function_name is a shell function from /path/to/file
Pertama-tama, sebuah fungsi dapat didefinisikan tanpa function
kata kunci sehingga penelusuran yang lebih baik adalah
grep 'cp()' .*
Itu akan mencari melalui file seperti .zshrc
dan .profile
dan apa tidak. Jika tidak menemukan apa pun, Anda mungkin juga ingin melihat berbagai file yang dimuat oleh zsh
. Ini terdaftar di akhir man zsh
:
FILES
$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
${TMPPREFIX}* (default is /tmp/zsh*)
/etc/zsh/zshenv
/etc/zsh/zprofile
/etc/zsh/zshrc
/etc/zsh/zlogin
/etc/zsh/zlogout (installation-specific - /etc is the default)
Secara default $ZDOTDIR
harus menjadi $HOME
Anda . Jadi, perintah ini akan menemukan file Anda yang menyinggung:
grep 'cp()\|cp ()' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin /etc/zsh/zshenv \
/etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Saya menambahkan \|
karena Anda juga dapat memiliki spasi antara nama fungsi dan fungsi itu sendiri. Terakhir, @Dennis menunjukkan bahwa tanda kurung juga dapat dihilangkan jika Anda menggunakan function
kata kunci. Jadi, agar lebih aman, lakukan ini:
grep -E 'function cp|cp *\(\)' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin \
/etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Versi zsh yang lebih baru (sejak 5.4, ditambahkan dalam komit 34f70c5
) mendukung $functions_source
array sebagai bagian dari zsh/parameter
modul (dokumentasi:man zshmodules
):
functions_source
Larik asosiatif yang hanya dapat dibaca ini memetakan nama fungsi yang diaktifkan ke nama file yang berisi sumber fungsi.
Untuk fungsi yang dimuat secara otomatis yang telah dimuat, atau ditandai untuk pemuatan otomatis dengan jalur absolut, atau yang jalurnya diselesaikan dengan '
functions -r
’, ini adalah file yang ditemukan untuk pemuatan otomatis, diselesaikan ke jalur absolut.Untuk fungsi yang ditentukan dalam isi skrip atau file bersumber, ini adalah nama file tersebut. Dalam hal ini, ini adalah jalur persis yang awalnya digunakan untuk file tersebut, yang mungkin merupakan jalur relatif.
Untuk fungsi lainnya, termasuk yang ditentukan pada permintaan interaktif atau fungsi muat otomatis yang jalurnya belum diselesaikan, ini adalah string kosong. Namun, elemen hash dilaporkan sebagai definisi selama fungsi tersebut ada:kunci hash ini sama dengan yang ada di
$funcions
.
Jadi, Anda bisa melakukannya
echo $functions_source[cp]