คำถามติดแท็ก function

คำถามเกี่ยวกับการใช้ฟังก์ชั่นในบริบทของ Unix & Linux (ส่วนใหญ่ แต่ไม่เฉพาะเชลล์สคริปต์) ควรถามคำถามเกี่ยวกับการเขียนโปรแกรมใน Python, Perl, Ruby และอื่น ๆ ใน Stack Overflow

7
แนวคิด "การโทรกลับ" ของการเขียนโปรแกรมมีอยู่ใน Bash หรือไม่
สองสามครั้งเมื่อฉันอ่านเกี่ยวกับการเขียนโปรแกรมฉันพบแนวคิด "การโทรกลับ" สนุกฉันไม่เคยพบคำอธิบายที่ฉันสามารถเรียกว่า "การสอน" หรือ "ชัดเจน" สำหรับคำนี้ "ฟังก์ชั่นการโทรกลับ" (คำอธิบายเกือบทั้งหมดที่ฉันอ่านดูเหมือนว่าฉันแตกต่างจากที่อื่นมากพอและฉันรู้สึกสับสน) แนวคิด "การโทรกลับ" ของการเขียนโปรแกรมมีอยู่ใน Bash หรือไม่ ถ้าเป็นเช่นนั้นโปรดตอบด้วยตัวอย่างง่ายๆแบบ Bash
21 bash  function 

2
จะรับชื่อไฟล์บัฟเฟอร์ปัจจุบันเป็น emacs ได้อย่างไร
หนึ่งในคุณสมบัติหลักที่ฉันพลาดเกี่ยวกับ Vim คือมันมักจะบันทึกชื่อไฟล์ของไฟล์ปัจจุบันใน%บัฟเฟอร์ ( ข้อมูลเพิ่มเติม ) ที่อนุญาตให้เรียกใช้คำสั่งได้อย่างง่ายดายเช่น: ;; compile current file :! gcc % ;; source current file (useful when I'm editing .vimrc :source % ;; get the size of current file :! du -sh % ;; etc, etc... ฉันต้องการที่จะมีฟังก์ชั่นที่คล้ายกันภายใต้emacs(รุ่น 24 หากที่สร้างความแตกต่างใด ๆ ) คือมีวิธีที่ง่ายในการแทรกชื่อของไฟล์ที่เปิดในบัฟเฟอร์ปัจจุบัน ตัวอย่างของสิ่งที่ฉันต้องการจะทำ ที่นี่ฉันอธิบายกรณีการใช้งานพื้นฐานบางอย่างเพื่ออธิบายได้ดีขึ้นเมื่อฉันรู้สึกว่าจำเป็นต้องใช้ทางลัด รวบรวม: เมื่อฉันป้อนM-x compileemacs …
19 emacs  function 




5
วิธีการตั้งค่านามแฝงในแต่ละไดเรกทอรี?
สมมติว่าคุณมีนามแฝงgoแต่ต้องการให้ทำสิ่งต่าง ๆ ในไดเรกทอรีที่ต่างกันหรือไม่ ในไดเรกทอรีหนึ่งควรรันcmd1แต่ในอีกไดเรกทอรีหนึ่งควรรันcmd2 อย่างไรก็ตามฉันมีชื่อแทนสำหรับการเปลี่ยนไปยังไดเรกทอรีด้านบนแล้วดังนั้นจึงเป็นไปได้ที่จะผนวกการgoมอบหมายนามแฝงเข้ากับfooนามแฝง alias "foo=cd /path/to/foo" ทำงานใน bash (?) บน OSX

2
นามแฝงและฟังก์ชั่น
จากคู่มือทุบตี กฎที่เกี่ยวข้องกับคำจำกัดความและการใช้นามแฝงค่อนข้างสับสน Bash จะอ่านบรรทัดที่สมบูรณ์อย่างน้อยหนึ่งรายการก่อนดำเนินการคำสั่งใด ๆ ในบรรทัดนั้น นามแฝงจะถูกขยายเมื่อคำสั่งถูกอ่านไม่ใช่เมื่อถูกเรียกใช้งาน ดังนั้นคำนิยามนามแฝงที่ปรากฏบนบรรทัดเดียวกันกับคำสั่งอื่นจะไม่มีผลจนกว่าจะอ่านบรรทัดอินพุตถัดไป คำสั่งที่ตามหลังนิยาม alias บนบรรทัดนั้นจะไม่ได้รับผลกระทบจาก alias ใหม่ ลักษณะการทำงานนี้ยังเป็นปัญหาเมื่อใช้งานฟังก์ชัน นามแฝงจะถูกขยายเมื่อคำจำกัดความฟังก์ชั่นการอ่านไม่ได้เมื่อฟังก์ชั่นการดำเนินการเพราะคำนิยามฟังก์ชั่นเป็นตัวเองคำสั่งผสม เป็นผลให้, นามแฝงที่กำหนดในฟังก์ชั่นจะไม่สามารถใช้งานได้จนกว่าจะมีการใช้งานฟังก์ชันดังกล่าว เพื่อความปลอดภัยให้ใส่คำจำกัดความของนามแฝงบนบรรทัดแยกต่างหากเสมอและห้ามใช้นามแฝงในคำสั่งผสม ประโยคสองประโยค "นามแฝงถูกขยายเมื่อนิยามฟังก์ชันถูกอ่านไม่ใช่เมื่อเรียกใช้ฟังก์ชัน" และ "นามแฝงที่กำหนดในฟังก์ชันไม่พร้อมใช้งานจนกว่าหลังจากฟังก์ชันนั้นถูกเรียกใช้งาน" ดูเหมือนจะขัดแย้งกัน คุณสามารถอธิบายสิ่งที่พวกเขาหมายถึงตามลำดับ?
17 bash  alias  function 

5
ฟังก์ชันทุบตี stateful
ฉันต้องการใช้ฟังก์ชั่นใน Bash ซึ่งจะเพิ่มจำนวน (และคืน) จำนวนการโทรทุกครั้ง น่าเสียดายที่นี่ดูไม่สำคัญเพราะฉันเรียกใช้ฟังก์ชั่นภายใน subshell และดังนั้นจึงไม่สามารถแก้ไขตัวแปรของ parent shell ได้ นี่คือความพยายามของฉัน: PS_COUNT=0 ps_count_inc() { let PS_COUNT=PS_COUNT+1 echo $PS_COUNT } ps_count_reset() { let PS_COUNT=0 } นี้จะใช้ดังนี้ (และด้วยเหตุนี้ฉันต้องเรียกใช้ฟังก์ชันจาก subshell): PS1='$(ps_count_reset)> ' PS2='$(ps_count_inc) ' ด้วยวิธีนี้ฉันจะได้รับพรอมต์หลายบรรทัดที่มีหมายเลข: > echo 'this 1 is 2 a 3 test' น่ารัก แต่เนื่องจากข้อ จำกัด ดังกล่าวไม่ทำงาน โซลูชันที่ไม่ทำงานจะเขียนจำนวนลงในไฟล์แทนตัวแปร อย่างไรก็ตามสิ่งนี้จะสร้างความขัดแย้งระหว่างเซสชันหลายเซสชันพร้อมกัน ฉันสามารถต่อท้าย ID …

1
วิธีการใช้ฟังก์ชั่นที่กำหนดไว้ด้วย xargs
นี่คือรหัสของฉัน #!/bin/bash showword() { echo $1 } echo This is a sample message | xargs -d' ' -t -n1 -P2 showword ดังนั้นฉันจึงมีฟังก์ชั่นshowwordที่สะท้อนสิ่งที่คุณส่งผ่านสายเป็นพารามิเตอร์ไปยังฟังก์ชั่น จากนั้นฉันได้xargsลองเรียกใช้ฟังก์ชั่นแล้วส่งต่อทีละหนึ่งคำไปยังฟังก์ชั่นแล้วเรียกใช้ฟังก์ชัน 2 ชุดพร้อมกัน สิ่งที่ไม่ทำงานคือxargsไม่รู้จักฟังก์ชั่น ฉันจะบรรลุสิ่งที่ฉันพยายามทำได้อย่างไรฉันจะทำให้ xargs ทำงานกับฟังก์ชันได้showwordอย่างไร
16 bash  xargs  function 

3
การเรียกใช้งาน executable ใน PATH ด้วยชื่อเดียวกันกับฟังก์ชั่นที่มีอยู่
บางครั้งฉันกำหนดฟังก์ชั่นที่ให้เงาของไฟล์ที่ปฏิบัติการได้และปรับแต่งอาร์กิวเมนต์หรือเอาต์พุตของมัน ดังนั้นฟังก์ชั่นจึงมีชื่อเดียวกับไฟล์ที่เรียกใช้งานได้และฉันต้องการวิธีเรียกใช้ไฟล์ที่เรียกใช้จากฟังก์ชันโดยไม่ต้องเรียกใช้ฟังก์ชันซ้ำ ตัวอย่างเช่นเมื่อต้องการเรียกใช้ผลลัพธ์ของการfossil diffผ่านcolordiffและless -Rฉันใช้: function fossil () { local EX=$(which fossil) if [ -z "$EX" ] ; then echo "Unable to find 'fossil' executable." >&2 return 1 fi if [ -t 1 ] && [ "$1" == "diff" ] ; then "$EX" "$@" | colordiff | less -R return …
16 bash  path  function 

1
ดำเนินการคำสั่งที่จัดทำโดยพารามิเตอร์ฟังก์ชัน
ฉันพยายามที่จะสร้างวิธีการฟังก์ชั่นในสคริปต์ทุบตีที่ดำเนินการคำสั่งซึ่งให้กับวิธีการโดยพารามิเตอร์ ความหมายบางอย่างเช่นนี้: special_execute() { # Some code # Here's the point where the command gets executed $@ # More code } special_execute echo "abc" ฉันพยายามแล้วผม$@, "$@", $*, "$*"วิธีการที่ฉันจะทำเช่นนั้น?

4
ฟังก์ชั่นการโทรประกาศด้านล่าง
เป็นไปได้ไหมที่จะเรียกฟังก์ชั่นที่ถูกประกาศด้านล่างด้วยการทุบตี? ตัวอย่าง if [ "$input" = "yes" ]; then YES_FUNCTION elif [ "$input" = "no" ]; then NO_FUNCTION else exit 0; fi YES_FUNCTION() { ..... ..... } NO_FUNCTION() { ..... ..... }

2
วิธีการส่งพารามิเตอร์เพื่อทำงานในสคริปต์ทุบตี?
ฉันต้องการเขียนฟังก์ชั่นที่ฉันสามารถโทรหาจากสคริปต์ที่มีตัวแปรต่าง ๆ มากมาย ด้วยเหตุผลบางอย่างฉันมีปัญหาในการทำเช่นนี้ ตัวอย่างที่ฉันอ่านเสมอใช้ตัวแปรทั่วโลก แต่นั่นจะไม่ทำให้โค้ดของฉันอ่านง่ายขึ้นเท่าที่ฉันเห็น ตัวอย่างการใช้งานที่ตั้งใจไว้: #!/bin/bash #myscript.sh var1=$1 var2=$2 var3=$3 var4=$4 add(){ result=$para1 + $para2 } add $var1 $var2 add $var3 $var4 # end of the script ./myscript.sh 1 2 3 4 ฉันลองใช้$1และในฟังก์ชั่น แต่หลังจากนั้นมันก็ใช้ทั่วโลกที่สคริปต์ทั้งหมดถูกเรียกจาก โดยทั่วไปสิ่งที่ฉันกำลังมองหาสิ่งที่ต้องการ$1, $2และอื่น ๆ แต่ในบริบทของท้องถิ่นของฟังก์ชั่น ฟังก์ชั่นทำงานในภาษาที่เหมาะสม

3
แสดงร่างกายฟังก์ชั่นใน Bash
ฉันมีการตั้งค่าฟังก์ชั่นหลายอย่างใน.bashrcไฟล์ของฉัน ฉันต้องการแสดงโค้ดจริงของฟังก์ชันและไม่เรียกใช้งานเพื่ออ้างถึงบางสิ่งบางอย่างได้อย่างรวดเร็ว มีวิธีใดบ้างที่เราจะเห็นนิยามฟังก์ชั่น?
14 bash  function 

2
/ bin / sh: ข้อผิดพลาดการนำเข้าคำจำกัดความฟังก์ชันสำหรับ 'some-function'
ฉันพบข้อผิดพลาดนี้เมื่ออัปเดต bash สำหรับปัญหาด้านความปลอดภัย CVE-2014-6271: # yum update bash Running transaction (shutdown inhibited) Updating : bash-4.2.47-4.fc20.x86_64 /bin/sh: error importing function definition for `some-function'
14 bash  shell  function 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.