Làm thế nào để ghi lại các hàm bash và bí danh tùy chỉnh của tôi?


11

Vấn đề:

Tôi có nhiều hàm bash và bí danh. Tôi không thể nhớ tất cả chúng ở trên đỉnh đầu của mình, vì vậy tôi thường mở các tệp .bash_functions.bash_aliasestệp của mình để tìm thứ tôi cần.

Câu hỏi:

Làm cách nào tôi có thể liệt kê các hàm / bí danh có sẵn từ dấu nhắc bash?

Tôi có thể ghi lại các hàm / bí danh bash của mình bằng cách sử dụng các nhận xét (giống như PHPDoc) không?

Tôi chỉ muốn một cách đơn giản / tốt đẹp để xuất ra những gì có sẵn mà không cần phải mở các tệp. Sẽ thật tuyệt khi chạy một lệnh và yêu cầu nó đưa ra một danh sách động các chức năng / bí danh của tôi (ví dụ sử dụng sẽ là một điểm cộng). :)

Câu trả lời:


17

Để liệt kê các bí danh hoạt động, hãy chạy:

alias

Để xem tên của tất cả các chức năng hoạt động, hãy chạy:

declare -F

Để xem tên và định nghĩa của tất cả các chức năng hoạt động, hãy chạy:

declare -f

Hơn

Thông tin về bí danh cũng có sẵn ở định dạng thân thiện với tập lệnh với:

declare -p BASH_ALIASES

man bashcung cấp thêm thông tin về aliasnội dung:

   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.

Về các chức năng, man bashgiải thích rằng declarecó thể cung cấp thêm thông tin có sẵn nếu extdebugtùy chọn được đặt:

   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).

Liên kết

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html

Hà! Quá dễ dàng. Cảm ơn! Điều đó khá dễ dàng. Bất kỳ lời khuyên về danh sách chức năng tùy chỉnh?
mhulse

1
@mhulse Chào mừng bạn. Xem cập nhật cho các chức năng.
John1024

Cảm ơn các cập nhật! Tôi thấy bạn đã thêm declarethông tin. Cảm ơn bạn! Tôi có thể sống với declarealiasđể xem nhanh chóng và dễ dàng. Tôi chỉ nhận thấy rằng tôi có thể làm declare -f treemà chỉ phun ra treechức năng. Mát mẻ! Tôi đang bán. Cảm ơn một lần nữa! (Tôi có thể chấp nhận câu trả lời này trong 4 phút.)
mhulse

2
@ashumeow Văn bản của ss64.com tại ss64.com/bash/alias.html với các điều khoản bản quyền và phân phối của họ ss64.com/docs/copyright.html (phi thương mại!) BREAK các điều khoản của GFDL - giấy phép của bash hướng dẫn sử dụng, bởi vì chúng bao gồm văn bản từ gnu.org/software/bash/manual/html_node/Aliases.html : cho phép sử dụng thương mại các tác phẩm phái sinh của hướng dẫn Bash. Biên soạn của họ mà không có tài liệu tham khảo không có vẻ tốt cho lý do này và lý do quy kết tương tự.
imz - Ivan Zakharyaschev

Bạn có thể tìm thấy kỹ thuật được minh họa trong Xử lý đơn giản các tùy chọn tập lệnh shell sẽ được sử dụng.
DocSalvager

7

Tôi sử dụng chức năng sau đây và javadoc như bình luận để tạo tùy chọn --help cho tập lệnh của mình:

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;
}

Tại https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh bạn có thể thấy nó được sử dụng như thế nào trong một tập lệnh thực tế.


Điều này thực sự mát mẻ! Tôi ước tôi có thể đưa ra dấu kiểm màu xanh lá cây cho nhiều câu trả lời. Cảm ơn Kasper! Tôi không thể chờ đợi để thử điều này. :)
mhulse

Tôi tiếp tục nhận được grep: : No such file or directorykhi cố gắng chạy nó thông qua unix / bash như một hàm. Tôi biết câu hỏi này đã cũ, nhưng bạn có thể đưa ra một ví dụ về cách người ta chạy nó chỉ như một hàm bash thông qua dòng lệnh không? Cảm ơn!!! :)
mhulse

1
@mhulse, tôi quên đề cập rằng bạn cần xác định PROG=$0; Trả lời cập nhật.
Kasper van den Berg

Cảm ơn Kasper! Tôi thực sự muốn làm việc này, nhưng tôi không gặp may mắn cho đến nay. Tôi ghét tiếp tục làm phiền bạn, nhưng bạn có thể cung cấp một cuộc gọi ví dụ từ dòng lệnh bash không? Ngoài ra, làm cách nào tôi có thể thiết lập --helphoặc -help(nghĩa là if echo "$@" | egrep -q -e '(-h)|(--help)'; then .... Tôi muốn thiết lập .bash_functions/ aliasescho phép aliasname -hhoặc function arg --help. Cảm ơn một lần nữa!
mhulse

1
@mhulse Cuộc gọi ví dụ từ generateReport.shchính dòng lệnh chỉ hữu ích nếu bạn muốn lập chỉ mục các tài liệu y tế qua Zylab và truy vấn chúng qua Aida. Tuy nhiên, để thử chức năng trợ giúp, hãy sử dụng như sau : wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Làm thế nào để đạt được phần thứ hai bằng cách sử dụng aliasnametrong .bash_fifts tôi chưa (chưa) biết.
Kasper van den Berg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.