GNU/Linux >> Belajar Linux >  >> Linux

Menemukan sumber fungsi di zsh

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]

Linux
  1. Di mana fungsi itoa di Linux?

  2. Menjalankan fungsi ruang pengguna dari ruang kernel

  3. Menambahkan entri baru ke variabel PATH di ZSH

  1. Apa sumber kernel Linux saat ini?

  2. Apa sumber mentalitas kompilasi sendiri di linux

  3. Cara mengetahui sumber sinyal POSIX

  1. Linux memberi kekuatan pada internet, konfirmasi komisaris UE

  2. Fungsi Root Grup Pengguna??

  3. Redirect Ke File Yang Sama Dengan File Sumber yang Diproses Oleh Perintah?