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

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

1
ติดตามพารามิเตอร์บางอย่างในคำสั่งบางอย่าง
สมมติว่าฉันมีคำสั่งgit branch(เช่นมีคำสองคำ) เสมอ สิ่งที่ฉันต้องการคือการติดตามเมื่อคำสั่งนี้จะถูกดำเนินการกับข้อโต้แย้ง ตัวอย่างเช่นถ้าฉันรันคำสั่งgit branch developโดยไม่มีข้อผิดพลาดฉันต้องการบันทึกdevelopไฟล์ ฉันพยายามเขียนทับคำสั่ง git บนของฉัน.bash_profileบางอย่างเช่นนี้: git () { if [ $# -eq 3 ] then git $@ echo $2 > /path/tacked_parameters.txt else git $@ fi } แต่ดูเหมือนว่าใช้งานไม่ได้ดี มีวิธีการทำเช่นนี้?
10 bash  shell  function 

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

2
ฟังก์ชัน Bash ที่รับอินพุตจากพารามิเตอร์หรือไพพ์
ฉันต้องการเขียนฟังก์ชั่นทุบตีต่อไปนี้ในแบบที่มันสามารถรับอินพุตจากอาร์กิวเมนต์หรือไพพ์ได้ b64decode() { echo "$1" | base64 --decode; echo } การใช้งานที่ต้องการ: $ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ b64decode < file.txt $ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
10 bash  pipe  function  stdin 

2
ส่งผ่านข้อโต้แย้งไปยังฟังก์ชั่นตรงตามที่เป็นอยู่
ฉันมีฟังก์ชั่นต่อไปนี้: bar() { echo $1:$2; } ฉันกำลังเรียกฟังก์ชั่นนี้จากฟังก์ชั่นอื่น , foo. fooตัวเองเรียกว่าดังนี้: foo "This is" a test ฉันต้องการรับผลลัพธ์ต่อไปนี้: This is:a นั่นคือข้อโต้แย้งที่ได้รับควรจะราชสกุลเดียวกันกับที่ผมผ่านเข้าไปbarfoo จะfooต้องมีการดำเนินการอย่างไรเพื่อให้บรรลุเป้าหมายนี้? ฉันได้ลองใช้งานสองแบบต่อไปนี้ แต่ก็ไม่ได้ผล: foo() { bar $*; } - เอาท์พุท: this:is foo() { bar "$*"; } - เอาท์พุท: this is a test: คำถามของฉันคือวิธีที่ฉันสามารถรักษาข้อโต้แย้ง เป็นไปได้ทั้งหมดหรือไม่

6
แสดงฟิสิคัลดิสก์เท่านั้นเมื่อใช้ df และ mount
เมื่อฉันใช้dfหรือmountฉันส่วนใหญ่สนใจในฟิสิคัลพาร์ติชันดิสก์ ทุกวันนี้ผลลัพธ์ของคำสั่งเหล่านั้นถูกครอบงำด้วยระบบไฟล์ชั่วคราวและเสมือนกลุ่ม cg และสิ่งอื่น ๆ ที่ฉันไม่สนใจเป็นประจำ พาร์ติชันทางกายภาพของฉันในผลลัพธ์เริ่มต้นด้วย ' /' ดังนั้นฉันพยายามสร้างนามแฝงสำหรับdfและmount: alias df1="df | egrep '^/'" alias mount1="mount | egrep '^/'" ที่ทำงาน OK สำหรับmount1(แม้ว่ามันแสดงให้เห็นว่า ' /' สีแดง) แต่สำหรับdf1ผมจะบางครั้งเหมือนจะเพิ่ม-hตัวเลือกในการและไม่สามารถทำdf df1 -hฉันไม่ต้องการมีนามแฝงสำหรับชุดค่าผสมของตัวเลือกทั้งหมดที่ฉันอาจต้องการใช้ ฉันต้องดูการกำหนดฟังก์ชั่นใน bash (ฉันไม่ต้องการ) หรือไม่? มีวิธีแก้ปัญหาที่ดีกว่าdf1หรือไม่?

3
ส่งต่อฟังก์ชันและตัวแปรไปยัง sudo su - <user> << EOF
ฉันได้ประกาศฟังก์ชั่นและตัวแปรใน bash / ksh และฉันต้องการส่งต่อไปยังsudo su - {user} &lt;&lt; EOF: #!/bin/bash log_f() { echo "LOG line: $@" } extVAR="yourName" sudo su - &lt;user&gt; &lt;&lt; EOF intVAR=$(date) log_f ${intVAR} ${extVAR} EOF

1
ทำไมทุบตีถึงทำให้แจง / เรียกใช้เนื้อหาในตัวแปรสภาพแวดล้อม
ShellShockข้อผิดพลาดในการทำงานทุบตีโดยวิธีการของตัวแปรสภาพแวดล้อม สุจริตฉันประหลาดใจด้วยความจริงที่ว่ามีคุณสมบัติเช่น: "การส่งผ่านนิยามฟังก์ชันผ่าน env vars" ดังนั้นคำถามนี้ในขณะที่อาจไม่ได้กำหนดอย่างสมบูรณ์คือการขอตัวอย่างหรือกรณีที่จำเป็นต้องมีคุณสมบัตินี้? โบนัส. เชลล์อื่น ๆ zsh, dash ฯลฯ มีคุณสมบัตินี้ด้วยหรือไม่?

2
Gawk: ผ่านอาร์เรย์ไปยังฟังก์ชั่น
ติดอยู่กับ GNU awk 3.1.6 และคิดว่าฉันได้แก้ไขข้อบกพร่องของอาเรย์แล้ว แต่ยังมีสิ่งที่ดูเหมือนปัญหาขอบเขตในโปรแกรม 600 บรรทัด awk จำเป็นต้องตรวจสอบความเข้าใจของขอบเขตอาร์เรย์ใน awk เพื่อค้นหาข้อผิดพลาดของฉัน รับรหัส awk นี้เป็นตัวอย่าง ... function foo(ga) { ga[1] = "global result" } garray[1] = "global" foo(garray) print garray[1] จะพิมพ์ ... global result เนื่องจากอาร์เรย์จะถูกส่งผ่านไปยังฟังก์ชันโดยอ้างอิงเสมอดังนั้นอาร์เรย์ทั้งหมดจึงเป็นแบบโกลบอลเสมอ ไม่มีวิธีสร้างอาร์เรย์โลคัล ถูกต้องหรือไม่ ไม่พบเอกสารที่พูดอย่างชัดเจนว่า เนื่องจากฉันทำการดีบั๊กและตัว 3.1.6 รู้จักข้อบกพร่องในพื้นที่นี้ฉันกำลังพยายามหาจุดบกพร่องของ awk และจุดเริ่มต้นของฉัน เพิ่มเติม: เพราะเหตุใด ga [] จึงทำงานภายในฟังก์ชันได้ ก่อนอื่นเลยการส่งอาร์เรย์ไปยังฟังก์ชันด้วยfoo(ga)นั้นไม่จำเป็นจริง ๆ …
9 awk  function  array 

1
ฉันจะสร้างฟังก์ชั่นใน zsh ที่เรียกคำสั่งที่มีอยู่ด้วยชื่อเดียวกันได้อย่างไร?
ฉันจะเขียนฟังก์ชั่นในzshที่เรียกคำสั่งที่มีอยู่ด้วยชื่อเดียวกันกับฟังก์ชั่นได้อย่างไร ตัวอย่างเช่นฉันได้ลองทำสิ่งนี้เพื่ออธิบายคำถามของฉัน: function ls { ls -l $1 $2 $3 } เมื่อฉันรันด้วยls *ฉันได้รับต่อไปนี้: ls:1: maximum nested function level reached ฉันคิดว่านี่เป็นเพราะฟังก์ชั่นจะถูกเรียกซ้ำ ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร นี่เป็นตัวอย่างที่หยาบคายและในกรณีนี้นามแฝงจะทำงาน แต่ฉันมีตัวอย่างที่ซับซ้อนกว่าที่นามแฝงไม่เหมาะและดังนั้นฉันจะต้องเขียนฟังก์ชัน
9 zsh  function 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.