วิธีจัดทำฟังก์ชั่นทุบตีและนามแฝงที่กำหนดเองของฉัน


11

ปัญหา:

ฉันมีฟังก์ชั่นทุบตีและชื่อแทนหลายรายการ ฉันจำไม่ได้ว่าพวกเขาทั้งหมดอยู่ด้านบนของหัวของฉันดังนั้นฉันมักจะเปิดท้ายของฉัน.bash_functionsและ.bash_aliasesไฟล์เพื่อค้นหาสิ่งที่ฉันต้องการ

คำถาม (s):

ฉันจะแสดงรายการฟังก์ชั่น / นามแฝงที่มีอยู่จาก bash prompt ได้อย่างไร?

เป็นไปได้ไหมที่ฉันจะทำเอกสารฟังก์ชั่นทุบตี / นามแฝงของฉันโดยใช้ความคิดเห็น (kinda เช่น PHPDoc)?

ฉันแค่ต้องการวิธีที่ง่าย / ดีในการแสดงผลสิ่งที่มีอยู่โดยไม่ต้องเปิดไฟล์ มันจะเจ๋งมากในการรันคำสั่งและปล่อยให้มันมีรายการแบบไดนามิกของฟังก์ชั่น / ชื่อแทนของฉัน (ตัวอย่างการใช้งานจะเป็นบวก) :)

คำตอบ:


17

ในการแสดงชื่อแทนที่ใช้งานอยู่ให้รัน:

alias

หากต้องการดูชื่อของฟังก์ชั่นที่ใช้งานอยู่ให้รัน:

declare -F

หากต้องการดูชื่อและคำจำกัดความของฟังก์ชั่นที่ใช้งานอยู่ทั้งหมดให้เรียกใช้:

declare -f

มากกว่า

ข้อมูลเกี่ยวกับนามแฝงยังมีอยู่ในรูปแบบที่เป็นมิตรกับสคริปต์ด้วย:

declare -p BASH_ALIASES

man bashให้ข้อมูลเพิ่มเติมเกี่ยวกับ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.

เกี่ยวกับฟังก์ชั่นman bashอธิบายว่าdeclareสามารถให้ข้อมูลเพิ่มเติมยังคงมีอยู่ถ้าextdebugตั้งค่าตัวเลือก:

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

การเชื่อมโยง

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

ฮา! ง่ายเกินไป ขอบคุณ! นั่นเป็นเรื่องง่าย เคล็ดลับใด ๆ ในรายการฟังก์ชั่นที่กำหนดเอง
mululse

1
@mhulse การต้อนรับของคุณ ดูการอัพเดทสำหรับฟังก์ชั่น
John1024

ขอบคุณสำหรับการอัพเดท! ฉันเห็นคุณเพิ่มdeclareข้อมูล ขอขอบคุณ! ฉันสามารถอยู่กับdeclareและaliasเพื่อการรับชมที่รวดเร็วและง่ายดาย ฉันเพิ่งสังเกตเห็นว่าฉันสามารถทำได้declare -f treeซึ่งพ่นออกเฉพาะtreeฟังก์ชั่น เย็น! ฉันขายแล้ว ขอบคุณอีกครั้ง! (ฉันสามารถยอมรับสิ่งนี้เป็นคำตอบใน 4 นาที)
mhulse

2
@ashumeow ข้อความของ ss64.com ที่ss64.com/bash/alias.htmlพร้อมด้วยลิขสิทธิ์และเงื่อนไขการจำหน่ายss64.com/docs/copyright.html (ไม่ใช่เชิงพาณิชย์!) BREAK ข้อกำหนดของ GFDL - ใบอนุญาตของการทุบตี ด้วยตนเองเนื่องจากมีข้อความจากgnu.org/software/bash/manual/html_node/Aliases.html : ควรอนุญาตให้ใช้งานดัดแปลงของ Bash manual ได้ในเชิงพาณิชย์ การรวบรวมโดยไม่มีการอ้างอิงของพวกเขาดูเหมือนจะไม่ดีสำหรับเหตุผลนี้และเหตุผลที่คล้ายคลึงกัน
imz - Ivan Zakharyaschev

คุณอาจพบเทคนิคที่แสดงในการประมวลผลตัวเลือกเชลล์สคริปต์ที่ใช้งานได้ง่ายขึ้น
DocSalvager

7

ฉันใช้ฟังก์ชั่นต่อไปนี้และ javadoc ชอบความคิดเห็นเพื่อสร้างตัวเลือก - ช่วยสำหรับสคริปต์ของฉัน:

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

ที่https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.shคุณสามารถดูว่ามีการใช้งานอย่างไรภายในสคริปต์จริง


นี่มันเจ๋งจริงๆ! ฉันหวังว่าฉันจะให้เครื่องหมายถูกสีเขียวสำหรับคำตอบหลายข้อ ขอบคุณ Kasper! ฉันรอไม่ไหวที่จะลองทำสิ่งนี้ :)
mhulse

ฉันยังคงได้รับgrep: : No such file or directoryเมื่อพยายามเรียกใช้ผ่าน unix / bash เป็นฟังก์ชัน …ฉันรู้ว่าคำถามนี้เก่า แต่คุณสามารถยกตัวอย่างว่าจะใช้งานได้อย่างไรเช่นเดียวกับฟังก์ชั่นทุบตีผ่านบรรทัดคำสั่ง? ขอบคุณ !!! :)
mhulse

1
@hulse ฉันลืมที่จะพูดถึงว่าคุณจำเป็นต้องกำหนดPROG=$0; อัปเดตคำตอบแล้ว
Kasper van den Berg

ขอบคุณ Kasper! ฉันอยากให้มันใช้งานได้จริง แต่ฉันก็ยังไม่มีโชค ฉันเกลียดที่จะทำการดักฟังคุณ แต่คุณสามารถให้ตัวอย่างการโทรจากบรรทัดคำสั่ง bash ได้หรือไม่? นอกจากนี้วิธีการที่ฉันสามารถตั้งค่า--helpหรือ-help(เช่นif echo "$@" | egrep -q -e '(-h)|(--help)'; then ...ฉันชอบที่จะตั้งค่าของฉัน. .bash_functions/ aliasesเพื่อให้aliasname -hหรือfunction arg --helpขอขอบคุณอีกครั้ง.
mhulse

1
@mhulse ตัวอย่างการโทรจาก commandline generateReport.shนั้นมีประโยชน์เฉพาะในกรณีที่คุณต้องการทำดัชนีเอกสารทางการแพทย์ผ่าน Zylab และทำการสืบค้นผ่าน Aida อย่างไรก็ตามในการลองใช้ฟังก์ชั่นช่วยเหลือให้ใช้สิ่งต่อไปนี้: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. วิธีการบรรลุส่วนที่สองด้วยการใช้aliasnameใน. bash_functions ฉันไม่รู้ (ยัง)
Kasper van den Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.