Bagaimana cara mendokumentasikan fungsi dan alias bash khusus saya?

11

Masalah:

Saya memiliki beberapa fungsi bash dan alias. Saya tidak dapat mengingat semuanya di atas kepala saya, jadi saya biasanya membuka file .bash_functionsdan .bash_aliasesfile saya untuk menemukan yang saya butuhkan.

Pertanyaan:

Bagaimana saya bisa membuat daftar fungsi / alias yang tersedia dari bash prompt?

Apakah mungkin bagi saya untuk mendokumentasikan fungsi / alias bash saya menggunakan komentar (agak seperti PHPDoc)?

Saya hanya ingin cara sederhana / bagus untuk menampilkan apa yang tersedia tanpa harus membuka file. Akan lebih keren untuk menjalankan perintah dan memintanya mengeluarkan daftar dinamis fungsi / alias saya (contoh penggunaan akan menjadi nilai tambah). :)

mhulse
sumber

Jawaban:

17

Untuk daftar alias aktif, jalankan:

alias

Untuk melihat nama semua fungsi yang aktif, jalankan:

declare -F

Untuk melihat nama dan definisi semua fungsi yang aktif, jalankan:

declare -f

Lebih

Informasi tentang alias juga tersedia adalah format script-friendly dengan:

declare -p BASH_ALIASES

man bashmemberikan info lebih lanjut tentang aliasbuiltin:

   alias [-p] [name[=value] ...]
          Alias with  no  arguments  or  with  the  -p
          option  prints  the  list  of aliases in the
          form alias name=value  on  standard  output.
          When  arguments  are  supplied,  an alias is
          defined for each name whose value is  given.
          A  trailing  space in  value causes the next
          word to be checked  for  alias  substitution
          when  the  alias is expanded.  For each name
          in the argument list for which no  value  is
          supplied, the name and value of the alias is
          printed.  Alias returns true unless  a  name
          is   given  for  which  no  alias  has  been
          defined.

Mengenai fungsi, man bashjelaskan bahwa declaremasih dapat memberikan lebih banyak informasi tersedia jika extdebugopsi disetel:

   Function  names  and definitions may be listed with
   the -f option to the  declare  or  typeset  builtin
   commands.  The -F option to declare or typeset will
   list the function names only  (and  optionally  the
   source  file and line number, if the extdebug shell
   option is enabled).

Tautan

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html
John1024
sumber
Ha! Terlalu mudah. Terima kasih! Itu cukup mudah. Adakah tip tentang daftar fungsi khusus?
mhulse
1
@mhulse Selamat datang. Lihat pembaruan untuk fungsi.
John1024
Terima kasih atas pembaruannya! Saya melihat Anda menambahkan declareinfo. Terima kasih! Saya bisa hidup dengan declaredan aliasuntuk melihat cepat dan mudah. Saya hanya memperhatikan bahwa saya bisa melakukan declare -f treeyang hanya memuntahkan treefungsinya. Keren! Aku terjual. Terima kasih lagi! (Saya dapat menerima ini sebagai jawaban dalam 4 menit.)
mhulse
2
@ashumeow Teks ss64.com di ss64.com/bash/alias.html dengan ketentuan hak cipta dan distribusi ss64.com/docs/copyright.html (non-komersial!) BREAK ketentuan GFDL - lisensi bash manual, karena mereka menyertakan teks dari gnu.org/software/bash/manual/html_node/Aliases.html : penggunaan komersial karya turunan dari manual Bash harus diizinkan. Kompilasi mereka tanpa referensi sepertinya tidak bagus untuk ini dan alasan atribusi serupa.
imz - Ivan Zakharyaschev
Anda mungkin menemukan teknik yang diilustrasikan dalam pengolahan opsi skrip shell yang lebih sederhana agar bisa digunakan.
DocSalvager
7

Saya menggunakan fungsi berikut dan javadoc seperti komentar untuk membuat opsi --help untuk skrip saya:

PROG=$0 #The program name, used within doHelp

# Print a help message
# doHelp uses lines starting with ## to create the output
# the tags {@param ...} and {@code ...} colorize words
doHelp() {
grep '^##' "${PROG}" |
sed -e 's/^##[[:space:]]*//' |
while read line; do
    if ( echo "${line}" | grep -q '{@param [^}]*}' ); then
        # color parameter and echo evaulated value
        eval echo -e $(echo ${line} | sed \
            -e 's/^\(.*\){@param \([^}]*\)}\(.*\)$/\
            \"\1\\\\E[32;40m\2\\\\E[37;40m\\t(value: \"$\2\")\3\"/');
    else
        # other color commands
        echo -e $(echo ${line} | sed \
            -e 's/{@code \([^}]*\)}/\\E[36;40m\1\\E[37;40m/g');
    fi
done;
}

Di https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh Anda dapat melihat bagaimana ini digunakan dalam skrip aktual.

Kasper van den Berg
sumber
Ini sangat keren! Saya berharap bisa memberikan tanda centang hijau untuk beberapa jawaban. Kasper terima kasih! Saya tidak sabar untuk mencoba ini. :)
mhulse
Saya terus mendapatkan grep: : No such file or directoryketika mencoba menjalankannya melalui unix / bash sebagai fungsi. ... Saya tahu pertanyaan ini sudah tua, tetapi bisakah Anda memberikan contoh bagaimana orang akan menjalankan ini hanya sebagai fungsi bash melalui baris perintah? Terima kasih!!! :)
mhulse
1
@ mhulse, saya lupa menyebutkan bahwa Anda perlu mendefinisikan PROG=$0; jawaban diperbarui.
Kasper van den Berg
Kasper terima kasih! Saya benar-benar ingin ini berfungsi, tetapi sejauh ini saya tidak beruntung. Aku benci terus mengganggumu, tetapi bisakah kamu memberikan contoh panggilan dari bash command line? Juga, bagaimana saya bisa mengatur --helpatau -help(mis if echo "$@" | egrep -q -e '(-h)|(--help)'; then .... , Saya ingin mengatur .bash_functions/ aliasesuntuk mengizinkan aliasname -hatau function arg --help. Terima kasih lagi!
mhulse
1
@mhulse Contoh panggilan dari commandline generateReport.shitu sendiri hanya berguna jika Anda ingin mengindeks dokumen medis melalui Zylab dan meminta mereka melalui Aida. Namun, untuk mencoba bantuan fungsi penggunaan berikut: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Bagaimana mencapai bagian kedua dengan menggunakan aliasname.bash_functions Saya belum tahu.
Kasper van den Berg